Firebase React Собственные данные выборки - PullRequest
0 голосов
/ 08 сентября 2018

Я пытаюсь сделать приложение на реагирующем с помощью канала. На главном экране я иду за данными:

fetchData() {
firebase.database().ref(`/posts/${group}`).on('value', async snapshot => {...}
}

когда я хочу, например, добавить комментарий к посту, я сначала помещаю данные в базу данных с различными запросами, например:

export const likeComment = (...) => {   
firebase.database().ref(`/posts/${group}/${post}`).update
({
   updatedAt: firebase.database.ServerValue.TIMESTAMP 
});
firebase.database().ref(`/posts/${group}/${post}/lastComments`).set(...);

Но я понял, что моя первая функция fetchData была вызвана 3 раза. затем я сгруппировал свои запросы как:

let updates = {}
updates[`/posts/${group}/${post}/lastComments`] = {...};
updates[`/posts/${group}/${post}`] = { ... };
firebase.database().ref().update(updates);

Затем fetchData вызывался еще 2 раза.

Мне было интересно, был ли это лучший способ сделать это, и почему моя функция fetchData по-прежнему вызывалась дважды. Спасибо за вашу помощь

1 Ответ

0 голосов
/ 08 сентября 2018

Трудно сказать по ограниченному коду, но я предполагаю, что fetchData на самом деле вызывается не более одного раза, а вместо этого snapshot срабатывает при обновлении базы данных Firebase.

Часть вашего кода, в которой вы говорите .on('value', async snapshot =>, вы настраиваете прослушиватель для отправки вам обновлений в любое время при изменении значения.

Так что я думаю, что ваши три вызова:

  1. Когда вы впервые вызываете fetchData и настраиваете Слушатель
  2. Ваш .on( snapshot слушатель стреляет, когда вы звоните update
  3. Ваш .on( snapshot слушатель стреляет снова, когда вы Звоните set

Этот рабочий процесс баз данных на основе push-уведомлений является одним из основных преимуществ Firebase. Если вы хотите получить данные только один раз и не получать обновления в реальном времени, вы можете позвонить .once( вместо .on(

https://firebase.google.com/docs/database/web/read-and-write

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