本文主要是介绍Can‘t perform a React state update on an unmounted component,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
在React开发中,我们可能经常会遇到这个一个警告
Can't perform a React state update on an unmounted component.
This is a no-op, but it indicates a memory leak in your application.
我们不能在组件销毁后设置state,防止出现内存泄漏的情况
关于react中切换路由时报以上错误,实际的原因是因为在组件挂载(mounted)之后进行了异步操作,比如ajax请求或者设置了定时器等,而你在callback中进行了setState操作。当你切换路由时,组件已经被卸载(unmounted)了,此时异步操作中callback还在执行,因此setState没有得到值。
解决的方式有两种:
一、在卸载的时候对所有的操作进行清除(例如:abort你的ajax请求或者清除定时器)
componentDidMount = () => {//1.ajax请求$.ajax('你的请求',{}).then(res => {this.setState({aa:true})}).catch(err => {})//2.定时器timer = setTimeout(() => {//dosomething},1000)
}
componentWillUnMount = () => {//1.ajax请求$.ajax.abort()//2.定时器clearTimeout(timer)
}
二、设置一个flag,当unmount的时候重置这个flag
componentDidMount = () => {this._isMounted = true;$.ajax('你的请求',{}).then(res => {if(this._isMounted){this.setState({aa:true})}}).catch(err => {})
}
componentWillUnMount = () => {this._isMounted = false;
}
三、最简单的方式(万金油)
componentDidMount = () => {$.ajax('你的请求',{}).then(res => {this.setState({data: datas,});}).catch(error => {});
}
componentWillUnmount = () => {this.setState = (state,callback)=>{return;};
}
这篇关于Can‘t perform a React state update on an unmounted component的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!