You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用addData添加Todo时出现EventEmitter.removeListener弃用警告的原因是什么

警告触发原因

你收到的是EventEmitter废弃API的调用提醒,该警告并非由你贴出的addData、onAddTodo新增数据的代码直接导致,触发的核心原因有两类:

  • React Native/Node.js的EventEmitter模块早已废弃removeListener(eventName, callback)写法,官方要求后续统一调用addListener返回的订阅对象自带的remove()方法取消监听
  • 你调用的getTodos方法内部大概率使用了Firestore的onSnapshot实时监听接口,你当前使用的@react-native-firebase/firestore版本较低,底层实现监听销毁逻辑时依然调用了已经被弃用的removeListener方法,每次你新增数据后刷新列表调用getTodos时,就会触发该警告
  • 少部分情况是你手动编写监听器移除逻辑时,直接调用了removeListener方法,也会触发该提醒
修复方案

该警告仅为弃用提示,不会影响现有功能正常运行,可根据实际情况选择修复方式:

  • 优先升级@react-native-firebase/firestore及相关RN Firebase依赖到最新稳定版,官方已经在后续版本修复了底层调用废弃API的问题,升级后警告会自动消失
  • 调整你自己的Firestore监听逻辑,不要手动调用removeListener方法,保存onSnapshot返回的取消订阅函数,在需要销毁监听时直接调用该函数即可,参考写法:
// 声明变量保存取消订阅函数
let unsubscribe = null;

const getTodos = () => {
  // 先销毁之前的旧监听,避免重复注册
  if (unsubscribe) unsubscribe();
  unsubscribe = firestore()
    .collection(constants.collection_name)
    .where('is_deleted', '==', false)
    .onSnapshot(querySnapshot => {
      // 处理todo列表更新逻辑
    }, err => showError(err))
}

// 组件卸载时调用取消监听,避免内存泄漏
useEffect(() => {
  return () => {
    if (unsubscribe) unsubscribe();
  }
}, [])
  • 若暂时无法升级依赖也不想看到警告,可以在项目入口文件添加日志过滤规则:
import { LogBox } from 'react-native';
LogBox.ignoreLogs(['EventEmitter.removeListener']);

内容的提问来源于stack exchange,提问作者Kanwarjeet Singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 04:09:02