卸载组件上的状态更新如何导致内存泄漏?

Jor*_*dan 3 javascript memory-leaks reactjs

更新未挂载组件的状态如何导致内存泄漏?

已知如何修复以下错误(一种解决方案另一种解决方案

警告:无法对卸载的组件执行 React 状态更新。这是一个空操作,但它表明您的应用程序中存在内存泄漏。要修复,请取消 useEffect 清理函数中的所有订阅和异步任务。

但是,当组件刚刚被解除并且不再需要时,用“isUnmounted”检查乱扔我的承诺链似乎很奇怪。这如何导致内存泄漏?

Nic*_*wer 6

这如何导致内存泄漏?

不能保证,但它可能取决于导致您在卸载后设置状态的原因。例如,如果您有一个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也就意味着不能被回收,所以组件将永远挂在内存中。