react中实现从服务器下载文件
百度找了个大牛写的便用在项目上,用谷歌,IE测试可以正常下载文件,用360浏览器会出现问题,页面切换会神奇的进入点击事件downloadDetailData这个方法回调里面,也就是会再次触发下载文件,其它浏览器不会,就360浏览器会出现这个问题,求解决,或者大家有在项目中使用过别的方法的话可以分享下么
//内容来源 https://blog.csdn.net/jiangkai528/article/details/78852777
downloadDetailData=()=>{
var divElement= document.getElementById("downloadDiv");
var downloadUrl=`${apiBasePath}/api/xxxxx/downloadDetailData`;
var params=JSON.stringify({
key:'value'
})
ReactDOM.render(
<form action={downloadUrl} method="post">
<input name="params" type="text" value={params}/>
</form>,
divElement
)
ReactDOM.findDOMNode(divElement).querySelector('form').submit();
ReactDOM.unmountComponentAtNode(divElement);
}
render() {
<div>
<div id='downloadDiv' style={{display:'none'}}> </div>
<Button type="primary" onClick={this.downloadDetailData}>导出</Button>
</div>
}
网上找了另外一个版本,发现用在项目上可行,其它浏览器测了暂时没发现有啥问题
let formElement = document.createElement('form');
formElement.style.display = "display:none;";
formElement.method = 'post';
formElement.action =
${apiBasePath}/api/xxxxx/downloadDetailData
;formElement.target = 'callBackTarget';
let inputElement = document.createElement('input');
inputElement.type = 'hidden';
inputElement.name = "params" ;
inputElement.value = params;
formElement.appendChild(inputElement);
document.body.appendChild(formElement);
formElement.submit();
document.body.removeChild(formElement);