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. To fix, cancel all subscriptions and asynchronous tasks in the componentWillUnmount method.
在写一个实时更新的时间,页面切换的时候提示这个错误
原写法:
time() {
const _this = this;
setInterval(() => {
_this.time()
this.setState({
currentTime: new Date().toLocaleString()
})
}, 1000);
}
componentDidMount(){this.time()}
展示:
问题:上面这个小东西是写在首页的,但是切换页面之后,这个程序还在执行(如果打个console会发现,切换了页面之后还是在执行)
问题是由于在首页销毁的时候没有及时清除掉定时器导致的。
解决
代码调整如下:
time() {
this.setState({
currentTime: new Date().toLocaleString()
})
}
componentDidMount() {
this.timer = setInterval(()=>this.time(),1000)
}
componentWillUnmount() {
clearInterval(this.timer)
}
** componentWillUnmount ——该钩子函数是在组件被销毁之前调用的,在此时把定时器清除就可以了。
** 定时器中的this指的是全局对象window,所以需要用箭头函数来固定this指向,或者在定时器外部定义_this来替换