Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript react+firebase unsubscribe不是useEffect中的函数_Javascript_Reactjs_Firebase_Google Cloud Firestore - Fatal编程技术网

Javascript react+firebase unsubscribe不是useEffect中的函数

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 => {

我想了解为什么下面的代码会触发此错误

打字错误 取消订阅不是一项功能

当我使用.onSnapshot函数而不是get时,它没有这样的错误

谢谢

  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分钟内接受答案。让我等一会儿