React + Firebase取消订阅不是useEffect中的函数

inn*_*nek 0 javascript firebase reactjs google-cloud-firestore

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

TypeError 取消订阅不是一个函数

.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]);
Run Code Online (Sandbox Code Playgroud)

Fra*_*len 6

您无法取消订阅通话get()。因此,get()不会返回取消订阅方法,并且您的调用失败。


当您开始使用 监听数据时onSnapshot,客户端会持续监听数据的更改。因此,它返回一个函数,您可以调用该函数来停止监听。

当调用get()加载数据时,客户端从服务器获取一次数据,然后立即停止监听变化。这就是为什么在您致电后无需取消订阅(也无法停止)的原因get()


如果数据加载的时间可能比组件安装的时间长,您需要检查处理程序内组件的卸载情况then()。有关示例,请参阅是否有方法检查反应组件是否已卸载?