Реакция + отмена подписки на firebase не используется - PullRequest
0 голосов
/ 26 апреля 2020

Я хотел бы понять, почему следующий код вызовет эту ошибку?

Отмена подписки 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]);

Ответы [ 2 ]

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

Вы не можете отписаться от get() звонка. Из-за этого get() не возвращает метод отмены подписки, и ваш вызов завершается неудачей.


Когда вы начинаете прослушивать данные с onSnapshot, клиент продолжает прослушивать изменения данных , По этой причине он возвращает функцию, которую вы можете вызвать, чтобы остановить прослушивание.

Когда вы вызываете get() для загрузки данных, клиент получает данные с сервера один раз, а затем немедленно прекращает прослушивание изменений. Вот почему нет необходимости отписываться (или нет возможности прекратить подписку) после вызова get().


Если есть вероятность, что загрузка данных может занять больше времени, чем смонтированный компонент, вы Я хочу проверить размонтирование компонента внутри обработчика then(). Пример этого см. В Есть ли способ проверить, отключен ли компонент реагирования?

0 голосов
/ 26 апреля 2020

Unsubscribe () не является функцией, потому что то, что возвращается из базы данных, не является функцией. Вызов функции в обмен на очистку. Иметь функцию, которая делает уборку и вызывать ее.

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