React Native中继承EventEmitter类失败:报错‘Super expression must either be null or a function’
解决React Native 0.68中继承EventEmitter报错的问题
这个错误我太熟悉了!你遇到的TypeError: Super expression must either be null or a function,核心原因是React Native 0.68版本已经不再将EventEmitter作为可继承的类暴露在react-native包中了——原来的导出要么是null,要么是一个无法被继承的对象,所以当你尝试用它作为父类时就会触发这个报错。
解决方案:改用Node.js的events模块
React Native完全支持Node.js核心模块中的EventEmitter,这也是官方现在推荐的JS层事件发射方案。修改你的代码如下:
// 替换原来的导入语句 import EventEmitter from 'events'; class A extends EventEmitter { constructor() { super(); } } export const a = new A();
额外说明
如果你需要和原生模块的事件交互(比如监听原生发送过来的事件),那应该使用react-native包中的NativeEventEmitter,用法示例如下:
import { NativeEventEmitter, NativeModules } from 'react-native'; const { YourNativeModule } = NativeModules; const emitter = new NativeEventEmitter(YourNativeModule);
但如果只是在JS代码内部实现事件订阅/发射的逻辑,用上面的events模块方案就完全够用了。
内容的提问来源于stack exchange,提问作者Esben von Buchwald
相关产品推荐
相关产品推荐

