Firebase 9.0.0正确取消监听的方式:用返回的Unsubscribe还是off方法?
两种移除监听器的方式功能完全等价,你可以根据自己的代码习惯选择,Firebase 9及以上的模块化版本更推荐使用onValue返回的Unsubscribe回调。
两种方式的区别说明
off()是Firebase为了兼容旧版本命名空间API保留的接口,如果你是从低版本升级上来,原有使用off()的代码不需要修改就能正常运行。但用off()移除监听器时,你需要同时持有数据库引用、事件类型、对应的监听器回调三个变量,移除时只要有一个参数传错(比如事件名拼写错误、传入的回调和注册时不是同一个实例),就会导致监听器移除失败。
使用off()的示例代码如下:// 需要存储引用、事件类型、监听器三个变量 const featuresRef = ref(db, 'features') const dataListener = snapshot => { if(snapshot.val()){ // 读取数据 } } onValue(featuresRef, dataListener) // 移除时参数必须完全对应 off(featuresRef, 'value', dataListener)- 用
onValue返回的Unsubscribe回调是Firebase 9模块化API的标准设计,你只需要存储这一个回调函数,调用时不需要传任何参数,完全避免了参数传错的问题。同时这种模式是Firebase全产品统一的监听移除方式,不管是实时数据库、Cloud Firestore还是Firebase Auth的状态监听,都是返回相同的Unsubscribe回调,写法统一不需要额外记忆不同产品的移除接口。
没有强制要求必须使用哪一种写法,两种方式底层实现逻辑完全一致,只是新写代码用返回的Unsubscribe回调可以写出更简洁、可维护性更高的代码。
内容的提问来源于stack exchange,提问作者Erik Martín Jordán
相关产品推荐
相关产品推荐

