为了账号安全,请及时绑定邮箱和手机立即绑定

react componentDidMount 数据请求两次各位有什么建议?

react componentDidMount 数据请求两次各位有什么建议?

梦里花落0921 2019-07-28 12:40:21
我在componentDidMount请求数据,然后在浏览器里看到我的数据请求了两次,在网上也找到一些答案,但是都没有解决问题。这是找到的一个回答:react-router3.xhashHistoryrender两次的bug,及解决方案然后在控制台打印出来this.props.router.location.action发现两次都是POP并没有像上面链接说的那样一个是PUSH一个是POP,请问有人遇到这个问题么?是怎么解决的?数据请求:componentDidMount(){window.addEventListener('scroll',this.onScrollHandle);if(!this.state.isDraft){this.props.getRate({type:this.state.type,userId:this.state.userId});this.handlePageChange(1,3);}this.getData();console.log(this.props.router.location.action);//this.setState({provinceInfo:getProvinceInfo(this.state.provinceId)});}getData=()=>{this.props.getApp(this.state.type,this.state.userId);this.props.getSimilarApp({apptype:this.state.type});}react版本如下"react":"^15.5.4","react-dom":"^15.5.4","react-redux":"^4.4.2","react-router":"^3.0.5",
查看完整描述

2 回答

?
慕尼黑8549860

TA贡献1818条经验 获得超11个赞

找到原因了,我在入口文件App.js里请求了一次不同用户权限的接口,而且在渲染的时候返回两个组件,如下:
render(){
const{isFetching}=this.props.userRole;
const{Content,Footer}=Layout;
if(isFetching){
return(
)
}else{
return(
...
);
}
}
我通过请求userRole接口的isFetching来控制渲染,但是这样做是不正确的,因为一开始isFetching就是false,所以,一开始就会render一次Layout,然后在componentDidMount请求userRole,isFetching变为true,页面卸载Layout,渲染Spin。等userRole请求结束,isFetching=false,继续渲染Layout。从而导致在Detail详情页面请求两次数据。修改后的代码如下:
return(
...
);
                            
查看完整回答
反对 回复 2019-07-28
  • 2 回答
  • 0 关注
  • 1705 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信