Javascript react+firebase unsubscribe不是useEffect中的函数
我想了解为什么下面的代码会触发此错误 打字错误 取消订阅不是一项功能 当我使用.onSnapshot函数而不是get时,它没有这样的错误 谢谢Javascript react+firebase unsubscribe不是useEffect中的函数,javascript,reactjs,firebase,google-cloud-firestore,Javascript,Reactjs,Firebase,Google Cloud Firestore,我想了解为什么下面的代码会触发此错误 打字错误 取消订阅不是一项功能 当我使用.onSnapshot函数而不是get时,它没有这样的错误 谢谢 useEffect(() => { const unsubscribe = database .collection("Maps") .doc(id) .collection("Entries") .get() .then( data => {
useEffect(() => {
const unsubscribe = database
.collection("Maps")
.doc(id)
.collection("Entries")
.get()
.then(
data => {
data.forEach(doc => {
console.log(doc.id, " => ", doc.data());
});
setLoading(false);
},
err => {
setError(err);
console.log(err);
}
);
return () => unsubscribe();
}, [id]);
你不能取消get电话的订阅。因此,get不会返回unsubscribe方法,您的调用将失败 当您开始使用onSnapshot侦听数据时,客户端将继续侦听数据的更改。因此,它返回一个函数,您可以调用该函数来停止侦听 当您调用get来加载数据时,客户端从服务器获取数据一次,然后立即停止侦听更改。这就是为什么没有必要取消订阅,也没有可能在您致电get后停止订阅
如果装载数据的时间可能比装载组件的时间长,那么您需要在then处理程序中检查组件的卸载情况。例如,请参见退订不是函数,因为从数据库返回的不是函数。调用一个函数作为清理的回报。有一个函数进行清理并调用它 谢谢。使用get-in-useEffect和卸载时取消订阅/清除它的正确方式是什么?如果我不返回=>取消订阅;控制台错误显示无法更新未安装组件的状态,并且可能存在内存泄漏。谢谢你可以在6分钟内接受答案。让我等一会儿