我正在尝试取消订阅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()
}
谢谢!
在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();
}, [])