React state update on an unmounted component

478 阅读1分钟

原因:

我们不能在组件销毁后设置state,防止出现内存泄漏的情况。组件Unmount 之后依然调用 this.setState() , 通常有两种情况。

1、设置了定时器setinterval 或者递归setTimeout。 unmonut之前没有清除掉。

2、异步请求callback在请求回来之前组件已经unmount

3、eventbus监听了,unmount未销毁

解决办法:
1、对于定时器
在componentWillUnmount 生命周期, 必须clear调用定时器

clearTimeout(timer)   // 清除延时器
clearInterval(timer)   // 清除定时器

2、对于异步请求:
方案一 设置标志位在挂载是为true,componentWillUnmount 时设为false,然后在异步调用的callback里面做判断
方案二 在componentWillUnmount 取消异步请求

this.setState = (state, callback) => {
  return;
};

3、销毁eventbus

eventbus.off(xxx)

来源链接:www.jianshu.com/p/a796dbe38…

来源链接:www.iiter.cn/blogs/3