Javascript 如何停止对componentWillUnmount的Firestore`get`查询
好的,我正在从componentDidMount中的Firestore获取数据,但是当它获取数据时,如果我更改了组件,我会得到一个错误消息: 警告:无法在未安装的服务器上调用setState(或forceUpdate) 组成部分。这是一个no op,但它表明您的内存中存在内存泄漏 应用若要修复,请取消所有订阅和异步任务 在componentWillUnmount方法中 在Firebase实时数据库中,我们调用Javascript 如何停止对componentWillUnmount的Firestore`get`查询,javascript,reactjs,firebase,google-cloud-firestore,Javascript,Reactjs,Firebase,Google Cloud Firestore,好的,我正在从componentDidMount中的Firestore获取数据,但是当它获取数据时,如果我更改了组件,我会得到一个错误消息: 警告:无法在未安装的服务器上调用setState(或forceUpdate) 组成部分。这是一个no op,但它表明您的内存中存在内存泄漏 应用若要修复,请取消所有订阅和异步任务 在componentWillUnmount方法中 在Firebase实时数据库中,我们调用ref.off()停止查询 想知道在Firestore怎么做 componentDidM
ref.off()
停止查询
想知道在Firestore怎么做
componentDidMount() {
Users.get().then(({ docs }) => {
const users = docs.map(user => user.data());
this.setState({ users });
});
}
componentWillUnmount(){
}
由于
Get
不是一种实时方法,因此无法在componentWillUnmont上停止它,因此在卸载组件后不应调用它。如果有人仍在寻找答案,我找到了一个解决方法:
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,设置状态将不起作用。我认为没有办法中止正在进行的get()
操作。对于onSnapshot()
您可以返回一个订阅,您可以调用该订阅来取消订阅,但是get
在我看来没有。我如何才能取消onSnapshot()
上的订阅?请看,这并不是真的中止不必要的获取或保存网络带宽,它只是抑制了React
关于内存泄漏的警告