运行React Native项目出现EventEmitter.removeListener弃用警告怎么解决?
问题原因
这个警告是React Native 0.65+版本后的官方变更,原有的EventEmitter.removeListener方法已被废弃,官方要求改为通过EventEmitter.addListener返回的订阅对象调用remove()方法来移除监听。
解决方法
1. 业务代码自行实现监听的场景
把原来先存回调、再传回调移除的旧写法,改为存储监听返回的订阅对象,移除时直接调用订阅对象的方法即可。
旧写法(触发警告)
import { EventEmitter } from 'react-native'; const handleChange = () => { // 监听回调逻辑 }; // 添加监听 EventEmitter.addListener('change', handleChange); // 移除监听 EventEmitter.removeListener('change', handleChange);
新写法(无警告)
import { EventEmitter } from 'react-native'; const handleChange = () => { // 监听回调逻辑 }; // 存储addListener返回的订阅实例 const changeSubscription = EventEmitter.addListener('change', handleChange); // 需要移除监听时调用实例的remove方法 changeSubscription.remove();
2. 第三方依赖库触发的场景
如果自己的业务代码里没有用到相关写法,说明是依赖的第三方库还未适配新的API,这种情况不会影响正常功能运行,可以暂时屏蔽该警告,等对应依赖库更新适配后再解除屏蔽即可。
在项目入口文件(通常是index.js或App.js)头部添加以下代码:
import { LogBox } from 'react-native'; LogBox.ignoreLogs([ 'EventEmitter.removeListener(\'change\', ...): Method has been deprecated' ]);
注意事项
- 新的监听写法支持同时添加多个同事件名的监听,互相之间的移除操作不会冲突,比旧写法更稳定
- 仅在确定是第三方库导致警告时才建议用屏蔽方案,自行实现的业务逻辑优先改成新写法避免后续版本升级出现功能异常
内容的提问来源于stack exchange,提问作者Hamid Hussainy
相关产品推荐
相关产品推荐

