【问题标题】:Can't get rid of: Warning: Can't perform a React state update on an unmounted component无法摆脱:警告:无法对未安装的组件执行 React 状态更新
【发布时间】:2020-10-18 17:44:01
【问题描述】:

完整的警告消息:警告:无法对未安装的组件执行 React 状态更新。这是一个空操作,但它表明您的应用程序中存在内存泄漏。要解决此问题,请在 useEffect 清理函数中取消所有订阅和异步任务。

此警告不会持续显示,它会在感觉时显示。应用刚启动时的大多数时间。

export default class something extends React.Component {
  _isMounted = false;
  state = {
    
  };

componentDidMount() {
    this._isMounted = true;
    firebase = new Fire((error, user) => {
      if (error) {
        return alert('something something something something');
      }

      firebase.getLists((lists) => {
        this.setState({ lists, user }, () => {
            this.setState({ loading: false });
        });
      });
      this.setState({ user });
    });
  }

componentWillUnmount() {
    this._isMounted = true;
    firebase.detach();
  }

这是在另一个包含所有 firebase 代码的文件中

detach() {
    this.unsubscribe();
  }

我猜这与 detach firebase.detach 有关

【问题讨论】:

  • 您是否尝试过在此question 中实施建议的解决方案?
  • @Tejogol 是的,我有,我要再试一次
  • @Tejogol 我 1 天没有错误,然后它又回来了 Rip
  • 按照我上面分享的问题添加`_isMounted`变量后,您是否仍然遇到相同的错误?如果是这样,您能否更新您的问题以反映您的实施情况。

标签: javascript reactjs react-native react-native-android


【解决方案1】:

您的代码需要进行一些小的更新才能正常工作。

在更新任何状态变量之前,您需要检查 _isMounted 是否为 true

您还需要在componentWillUnmount() 中设置_isMounted=false 而不是_isMounted=true

查看下面的更新代码:

export default class something extends React.Component {
  _isMounted = false;
  state = {
    
  };

componentDidMount() {
    this._isMounted = true;
    firebase = new Fire((error, user) => {
      if (error) {
        return alert('something something something something');
      }

      firebase.getLists((lists) => {
        if (this._isMounted){
          this.setState({ lists, user }, () => {
            this.setState({ loading: false });
          });
        }
      });
      if (this._isMounted){
        this.setState({ user });
      }
    });
  }

componentWillUnmount() {
    this._isMounted = false;
    firebase.detach();
  }

【讨论】:

  • 会尝试一下。如果它不来,因为它随时都会回来。我会接受这个答案。
猜你喜欢
  • 2021-02-24
  • 2021-03-27
  • 2019-09-11
  • 2021-08-07
  • 2020-06-14
  • 1970-01-01
  • 2021-12-03
  • 2021-11-09
相关资源
最近更新 更多