Как отписаться от изменений коллекции в Firestore - PullRequest
0 голосов
/ 26 апреля 2019

Я пытаюсь отписаться от прослушивателя изменений в Firestore, но не могу заставить его работать.

Согласно документации Firebase вам нужно вызвать метод onSnapshot (), чтобы прекратить прослушивание. Чего мне не хватает?

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

Это ловушка, которая вызывает создателей действий подписки / отмены подписки:

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()
}

Спасибо!

1 Ответ

1 голос
/ 26 апреля 2019

В вашем примере в действии 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();
}, [])


Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...