React componentDidUpdate 异步请求的回调可以使用this.setState吗?

官方文档: 说该生命周期函数很适合发送ajax请求,那么在请求的回调中可以更新setState吗

This is also a good place to do network requests as long as you compare the current props to previous props (e.g. a network request may not be necessary if the props have not changed).

可以的话,那它的使用场景和componentWillReceiveProps又有什么区别?还有它这种使用方式多吗

阅读 12k
4 个回答

可以的,可以利用componentDidUpdate的参数prevProps或prevState,比较上一次更新的值和现更新的值,如果值一样就没有必要请求接口了,以prevState为例
if (this.state.xxx !== prevState.xxx) {

this.fetchData(this.state.xxx);//这里是你的异步请求,我一般用的axios

}
这里的this.state.xxx指的是当前更新的值;prevState.xxx指的是上一个更新的值;这个判断会阻止异步不断的请求接口,componentDidUpdate组件初始化时不调用,如果页面需要初始化的时候,可以再次调用异步等

可以的,只要你不陷入无限循环就好,这样的 Condition 都可以:

componentDidUpdate: function() {
    if(condition) {
        this.setState({..})
    } else {
        //do something else
    }
}

可以,正如楼上所说,你要注意不要陷入死循环,所以你限制更改state的条件很重要;为什么睡陷入死循环?如果你在请求回调函数中更改了state,组件就会再次触发componentDidUpdate生命周期,如果修改state的条件设置的不合理,组件就会循环触发组件的componentDidUpdate周期,更新state,触发componentDidUpdate周期。。。。。。无穷无尽,所以限制更改state的条件很重要

根据需求阻止循环渲染 就可以

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏