Jor*_*dan 3 javascript memory-leaks reactjs
更新未挂载组件的状态如何导致内存泄漏?
警告:无法对卸载的组件执行 React 状态更新。这是一个空操作,但它表明您的应用程序中存在内存泄漏。要修复,请取消 useEffect 清理函数中的所有订阅和异步任务。
但是,当组件刚刚被解除并且不再需要时,用“isUnmounted”检查乱扔我的承诺链似乎很奇怪。这如何导致内存泄漏?
这如何导致内存泄漏?
不能保证,但它可能取决于导致您在卸载后设置状态的原因。例如,如果您有一个setInterval在卸载后继续运行的函数,则该函数及其闭包中的任何变量都不能被垃圾回收。
class ExampleComponent extends React.Component {
state: { seconds: 0 }
componentDidMount() {
setInterval(() => {
this.setState(prev => ({
seconds: prev.seconds + 1;
});
}, 1000);
}
// No clearing the interval in componentWillUnmount
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,set interval 内的匿名函数不能被垃圾回收,this也就意味着不能被回收,所以组件将永远挂在内存中。