如果两个组件侦听相同的数据库引用,我可以选择运行哪个侦听器吗?

我有两个组件 A 和 B。当 A 呈现时,它会在 firebase 实时数据库中侦听 messageRef 的 child_ added 事件。


  state = {

    messagesRef: firebase.database().ref("privateMessages")

  };


addListeners = currentUserUid => {

    this.state.messagesRef.on("child_added", snap => {

    ...

    }

}

但是组件 B 将从 A 呈现,并且它也具有相同引用的相同侦听器。在这种情况下,我如何选择只将 B 的侦听器设为活动状态,而禁用 A 的侦听器?现在,我通过显式调用.off()A 的所有侦听器,然后调用.on(). 代码 snipeet 如下所示。它在某种程度上解决了我的问题。但我不知道这是否合法,如果不合法,是否有更好的方法。谢谢!


addListeners = currentUserUid => {

    // explicitly .off all existing ones

    this.state.messagesRef.off();

    this.state.channels.forEach(channel => {

      this.state.messagesRef.child(channel.id).off();

    });


    // then do .on() again

    this.state.messagesRef.on("child_added", snap => {

    ...

    }

}


子衿沉夜
浏览 133回答 1
1回答

慕森卡

你在做什么对我来说似乎没问题。让听众保持活动状态可能没有任何真正的危害,因为如果只有一个听众,同一位置的两个听众不会使使用的带宽量增加一倍。侦听器将有效地共享快照数据。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript