在做react项目开发时,可能会发现关于内存泄漏的报错,这个时候就会一脸懵逼,我是干啥了,咋还内存泄漏了呢 。但也会发现这个错误并不影响我们程序的运行,而且上线的话报错也会没有,只是开发起来有点不爽。那到底是怎么回事呢,研究了一波,
- 组件卸载后,调用 setState 方法就会报这个错
可以设置一个开关,组件已经被销毁的时候就不调用setState方法,如果在每个组件上都设置这么一个方法的话就会显得比较繁琐,自然而然的就会想到ES6的修饰器,具体解决方法如下,只要在页面引入这一段代码就行
function inject_unmount (target) {
// 改装componentWillUnmount,销毁的时候记录一下
let next = target.prototype.componentWillUnmount
target.prototype.componentWillUnmount = function(){
if(next) next.call(this,...arguments)
this.unmount = true // 表示已经卸载
}
let setState = target.prototype.setState
// 每次在执行setState之前都查看该组件是否已经销毁
target.prototype.setState = function () {
if(this.unmount) return // 已经卸载的话就不执行
setState.call(this,...arguments)
}
}
export default inject_unmount
// @inject_unmount 在需要使用的组件前 引入就行