Javascript 如果两个组件侦听相同的数据库引用,我可以选择运行哪个侦听器吗?
我有两个组件A和B。渲染A时,它会侦听并添加firebase实时数据库中messagesRef的child_事件Javascript 如果两个组件侦听相同的数据库引用,我可以选择运行哪个侦听器吗?,javascript,reactjs,firebase-realtime-database,Javascript,Reactjs,Firebase Realtime Database,我有两个组件A和B。渲染A时,它会侦听并添加firebase实时数据库中messagesRef的child_事件 state = { messagesRef: firebase.database().ref("privateMessages") }; addListeners = currentUserUid => { this.state.messagesRef.on("child_added", snap => { ... } } 但是
state = {
messagesRef: firebase.database().ref("privateMessages")
};
addListeners = currentUserUid => {
this.state.messagesRef.on("child_added", snap => {
...
}
}
但是,组件B将从A呈现,并且它对同一引用也具有相同的侦听器。在这种情况下,我如何选择只将B的侦听器设置为活动,而禁用A的侦听器?现在,我在B中有了一个解决方法,为a的所有侦听器显式调用.off()
,然后调用.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 => {
...
}
}
我觉得你做的一切都很好。保持侦听器处于活动状态可能不会有任何真正的伤害,因为如果只有一个侦听器,那么在同一位置的两个侦听器将不会使使用的带宽增加一倍。监听器将有效地共享快照数据。我觉得您所做的一切都很好。保持侦听器处于活动状态可能不会有任何真正的伤害,因为如果只有一个侦听器,那么在同一位置的两个侦听器将不会使使用的带宽增加一倍。监听器将有效地共享快照数据。谢谢您的输入,道格!我很感激!谢谢你的意见,道格!我很感激!