用类修饰器 解决react内存泄漏的问题

在做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  在需要使用的组件前 引入就行

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值