【问题标题】:Firebase and Expo: Database add child and remove it immediatelyFirebase 和 Expo:数据库添加子项并立即将其删除
【发布时间】:2018-05-24 00:30:56
【问题描述】:

我正在使用 Expo 和 Firebase 创建一个会议应用程序(如 f8 应用程序)。

组件“TalkInfo”有一个函数addOrRemoveUserTalk(loggedUser, talk),当你点击某个Talk的Like/Dislike按钮时触发,状态“buttonText”可以是按钮中的“Like”或“Dislike”文本:

  • 如果this.state.buttonText == 'Dislike' 当您单击按钮时,应用会从数据库中删除“userTalk”
  • 如果this.state.buttonText == 'Like'应用程序为用户创建“userTalk”。

我有一个问题:我可以在数据库中添加一个 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' })
}

【问题讨论】:

  • 你应该使用一次而不是一次
  • 谢谢,它有效!差别不大,对我的代码影响很大。

标签: javascript firebase react-native firebase-realtime-database expo


【解决方案1】:

现在,每当您第一次“喜欢”帖子时,您都会添加一个“永远”处于活动状态的听众。你想要的只是读取一次值,然后停止监视它。正如 digit 评论的那样,您需要使用 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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-23
    • 1970-01-01
    • 1970-01-01
    • 2015-07-21
    • 2019-12-18
    • 2018-09-15
    相关资源
    最近更新 更多