Firestore 取消订阅 useEffect

IT技术 javascript reactjs firebase react-native google-cloud-firestore
2022-07-28 02:11:52

我正在尝试使用 useEffect 停止侦听 Firebase Firestore 集合更改。

我可以获取 Firebase 数据,但无法访问此 unsubscribe();

我怎样才能解决这个问题?


  let unsbscribe;

  async function getFirebaseData() {
      unsbscribe = db.collection('room')
          .where('joinUser', 'array-contains-any', [10])
          .onSnapshot((res) => {
            // do something...
          });


  useEffect(() => {
    getFirebaseData();
    return () => {
      unsbscribe(); // throws an error that unsubscribe is not a function.
    };
  }, []);

2个回答

您可以通过以下方式从useEffect钩子内部取消订阅:

useEffect(() => {
    const unsubscribe = db.collection('room')
        .where('joinUser', 'array-contains-any', [10])
        .onSnapshot((res) => {
            // do something...
        });
    return () => unsubscribe()
}, []);

尝试返回只是取消订阅

 let unsbscribe;

  async function getFirebaseData() {
      unsbscribe = db.collection('room')
          .where('joinUser', 'array-contains-any', [10])
          .onSnapshot((res) => {
            // do something...
          });


  useEffect(() => {
    getFirebaseData();
    return unsubscribe
  }, []);