如何取消订阅Firestore中的集合更改

问题描述 投票:0回答:1

我正在尝试取消订阅Firestore中的更改侦听器,但无法让它工作。

根据Firebase文档,您需要调用onSnapshot()方法来停止侦听。我错过了什么?

https://firebase.google.com/docs/firestore/query-data/listen

这是调用subscribe / unsubscribe动作创建者的钩子:

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

以下是订阅/取消订阅操作创建者:

export const subscribe = () => {
  return (dispatch) => {    
    const items = db.collection('items')

    items.onSnapshot((snapshot) => {
      const data = snapshot.docs.map((item) =>  item.data())

      dispatch({ type: 'DO_SOMETHING', payload: data })
    })
  }
}

export const unsubscribe = () => {
  const items = db.collection('items')

  const unsubscribe = () => items.onSnapshot(() => {})

  unsubscribe()
}

谢谢!

reactjs firebase redux google-cloud-firestore
1个回答
1
投票

unsubscribe动作的示例中,您创建另一个侦听器并立即取消订阅,因此它不会影响subscribe操作中的侦听器。

export const subscribe = (setUnsubscribe) => {
  return (dispatch) => {    
    const items = db.collection('items')

    const unsubscribe = items.onSnapshot((snapshot) => {
      const data = snapshot.docs.map((item) =>  item.data())
      dispatch({ type: 'DO_SOMETHING', payload: data })
    });

    setUnsubscribe(unsubcsribe);
  }
}


// Component

useEffect(() => {
  let unsubscribe = () => {};
  subscribe((func) => { unsubscribe = func });
  return () => unsubscribe();
}, [])


© www.soinside.com 2019 - 2024. All rights reserved.