首页 > 其他 > 详细

react中避免内存泄漏的方法

时间:2018-08-14 21:38:55      阅读:180      评论:0      收藏:0      [点我收藏+]

如果在react组件中设置了定制器或者在dom上绑定了事件,卸载组件时未清除定时器或未清除事件都会导致内存泄漏

例如下面代码:<button onClick={ReactDOM.unmountComponentAtNode.bind(this,document.getElementById(‘root‘))}>强制卸载</button>(此方法可以强制卸载组件)

import React,{Component} from ‘react‘
import ReactDOM from ‘react-dom‘
class App extends Component{
    constructor(props){
        super(props);
        this.state={
            opa:0
        }
    }
    componentDidMount(){   //组件挂载完成后执行的钩子函数
        this.refs.btn.onclick=()=>{  //给dom绑定事件
            alert(‘btn‘);
        }
        var opa = this.state.opa;
        this.timer = setInterval(()=>{  //设置定时器
            console.log(opa);     //如果卸载组件时没有清除定时器就会一直输出
            opa+=0.1;
            if(opa >= 1){
                opa = 0;
            }
            this.setState({
                opa
            })
        }, 300);
    }
    render(){
        return (<div className=‘app‘>
            <h1 style={{opacity:this.state.opa}}>HELLO WORLD</h1>
            <button onClick={ReactDOM.unmountComponentAtNode.bind(this,document.getElementById(‘root‘))}>强制卸载</button>
            <button ref="btn">弹出</button>
        </div>)
    }
}
export default App;

效果图:

技术分享图片

点击“强制卸载”,虽然组件被卸载了但是定时器和事件没有清除导致内存泄露,此时控制台会一直输出。

解决办法:我们可以利用钩子函数:componentWillUnmount() 进行定时器和事件的清除,添加如下代码:

componentWillUnmount(){     //卸载组件前执行的钩子函数
    this.refs.btn.onclick = null;  //清除dom上绑定的事件
    clearInterval(this.timer);      //清除定时器
}

 

react中避免内存泄漏的方法

原文:https://www.cnblogs.com/luowenshuai/p/9477980.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!