Firebase and Expo: в базу добавим ребенка и удалим его сразу - PullRequest
0 голосов
/ 24 мая 2018

Я создаю приложение для конференций (например, приложение f8) с Expo и Firebase.

Компонент «TalkInfo» имеет функцию addOrRemoveUserTalk(loggedUser, talk), которая срабатывает при нажатии кнопки «Мне нравится / не нравится» на некоторыхГоворите, и состояние "buttonText" может быть таким, как "Нравится" или "Не нравится" текст в кнопке:

  • Если this.state.buttonText == 'Dislike', когда вы нажимаете кнопку, приложение удаляет "userTalk" из БД
  • , и если this.state.buttonText == 'Like' приложение создает «userTalk» для пользователя.

У меня есть проблема: я могу добавить userTalk в БД, и я могу удалить его,НО, если я снова добавлю того же пользователя, поговорим, добавим его в firebase и немедленно удалим

Пожалуйста, кто-нибудь, кто владеет firebase, может мне помочь?

addOrRemoveUserTalk(loggedUser, talk) {
  var text = 'Like';

  if(this.state.buttonText == 'Dislike') {
    firebaseApp.database().ref().child('userTalks')
      .orderByChild('user')
      .equalTo(loggedUser.uid)
      .on('child_added', (snap) => {
        userTalk = snap.val();
        if(userTalk.talk == talk.id) {
          text = 'Like';
          console.log("CHILD WILL BE DESTROYED");
          snap.ref.remove();
        }
      })
  } else {
    text = 'Dislike';
    console.log("CHILD WILL BE ADDED");
    firebaseApp.database().ref().child('userTalks').push({
      user: loggedUser.uid,
      talk: talk.id,
    }).key;
  }

  console.log("text in addOrRemoveUserTalk_________", text);

  text == 'Like' ?
    this.setState({ buttonText: 'Like' }) :
    this.setState({ buttonText: 'Dislike' })
}

1 Ответ

0 голосов
/ 24 мая 2018

Прямо сейчас, когда вы впервые «любите» публикацию, вы добавляете слушателя, который остается «навсегда» активным.Вместо этого вам нужно просто прочитать значение один раз, а затем прекратить его мониторинг.Как прокомментировал цифра, вы хотите использовать once() вместо on().

if(this.state.buttonText == 'Dislike') {
  firebaseApp.database().ref().child('userTalks')
    .orderByChild('user')
    .equalTo(loggedUser.uid)
    .once('child_added', (snap) => {
      userTalk = snap.val();
      if(userTalk.talk == talk.id) {
        text = 'Like';
        console.log("CHILD WILL BE DESTROYED");
        snap.ref.remove();
      }
    })
} else {
  text = 'Dislike';
  console.log("CHILD WILL BE ADDED");
  firebaseApp.database().ref().child('userTalks').push({
    user: loggedUser.uid,
    talk: talk.id,
  }).key;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...