使用npx create-react-native-library新建Native Module访问返回null如何解决
问题原因
新增Native Module通过ReactNative.NativeModules访问返回null,通常是以下几类原因导致:
- 原生端未正确注册新增的模块类
- 原生端模块导出名称与JS端调用名称大小写不匹配
- 新增原生文件后未重新编译原生端代码,仅刷新JS bundle不生效
- RN自动链接未识别新增原生文件,或单平台遗漏实现
- 模块代码存在语法错误导致初始化失败
排查解决步骤
通用排查
- 校验原生模块
getName()方法(Android)/RCT_EXPORT_MODULE宏参数(iOS)的返回值,与JS端访问NativeModules.xxx的属性名完全一致,注意大小写敏感 - 每次新增原生文件后必须重新执行原生端构建,不要仅依赖JS热重载、live reload功能
- 在原生模块的构造/初始化方法中添加日志输出,确认APP启动时模块类被正常实例化
Android平台专项排查
- 找到库项目中实现
ReactPackage接口的类,检查createNativeModules方法返回的List中是否手动添加了新增的模块实例,模板默认仅注册初始生成的模块,新增模块必须手动补加,示例:
@Override public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) { List<NativeModule> modules = new ArrayList<>(); // 原有模块 modules.add(new ExistingModule(reactContext)); // 必须手动添加新增模块 modules.add(new NewCustomModule(reactContext)); return modules; }
- 确认新增模块类添加了
@ReactModule注解,且name参数与getName()返回值一致
iOS平台专项排查
- 确认新增模块类遵守
RCTBridgeModule协议 - 检查模块实现代码中是否添加了
RCT_EXPORT_MODULE()宏,需要自定义导出名时传入对应参数即可,无参数时默认导出类名 - Swift编写的模块需要确保添加了正确的桥接头文件,类和导出方法都用
@objc修饰 - 清理构建缓存后重试:按住Option键点击Xcode顶部菜单栏Product -> Clean Build Folder,删除
ios/build目录后重新构建项目
内容的提问来源于stack exchange,提问作者CapiPato
相关产品推荐
相关产品推荐

