React 之 cancel all subscriptions and asynchronous tasks in the componentWillUnmount method
程序员文章站
2023-12-30 19:00:28
...
诱发这个情况的原因是,我在componentDidMount 里面执行的ajax请求
componentDidMount() {
getClassNameList()
.then(res => {
if (res.code == 200) {
this.setState({
classID: res.data[0].classId,
classList: res.data
})
}
})
}
解决办法:在componentWillUnmount里面执行一下代码
componentWillUnmount(){
this.setState = (state, callback) => {
return;
}
}
问题分析:通常是 react 组件已经从 DOM 中移除,但是我们在组件中做的一些异步操作还未结束,如组件卸载之后依然调用了 this.setState()
,而此时我们已经将改组件dom移除,通常有以下两种情况:
1.设置了定时器setInterval 、setTimeout等, 在componentwillunmount之前没有清除掉;
2.异步请求callback
在请求回来之前组件已经执行了componentwillunmount;