如何停止对componentWillUnmount

时间:2018-09-26 18:54:19

标签: javascript firebase google-cloud-firestore

好吧,所以我要从componentDidMount中的Firestore中获取数据,但是如果我更改组件,则在获取数据时会出现错误提示:

  

警告:无法在已卸载的设备上调用setState(或forceUpdate)   零件。这是空操作,但表示您的内存泄漏   应用。要修复,请取消所有订阅和异步任务   在componentWillUnmount方法中。

在Firebase实时数据库中,我们调用ref.off()停止查询。

想知道如何在Firestore中做

componentDidMount() {
  Users.get().then(({ docs }) => {
    const users = docs.map(user => user.data());
      this.setState({ users });
  });
}

componentWillUnmount(){

}

2 个答案:

答案 0 :(得分:2)

如果有人仍在寻找答案,我找到了一种解决方法:

componentDidMount() {
  this.mounted = true;

  Users.get().then(({ docs }) => {
    const users = docs.map(user => user.data());
      if(this.mounted) this.setState({ users });
  });
}

componentWillUnmount(){
  this.mounted = false;
}

this.mounted将为false,当卸载组件且setState将不起作用时。

答案 1 :(得分:0)

由于Get不是实时方法,因此无法在componentWillUnmont上停止它,因此一旦卸载组件,就不应调用它。