React Native TurboModule无法注册,启动时报undefined is not an object

Newb.素平 阅读 327

我在按照官方文档实现一个TurboModule时遇到了问题。按照步骤创建了MyModule.java并注册到ReactPackage,但运行时却报错了:

TypeError: undefined is not an object (evaluating '_NativeModules.MyModule.multiply')

已经确认模块类名和package名称一致,甚至用Log验证过模块确实被加载了。是不是注册流程哪里漏掉了?或者需要额外配置metro的transform设置?

我来解答 赞 19 收藏
二维码
手机扫码查看
2 条解答
汉霖 Dev
这问题我也踩过坑,TurboModule注册确实有点烦人。说几个关键点:

1. 检查getReactModuleInfoProvider()方法有没有正确实现,这个经常漏掉。比如:

@Override
public ReactModuleInfoProvider getReactModuleInfoProvider() {
return () -> MapBuilder.of(
"MyModule",
new ReactModuleInfo(
"MyModule",
"com.yourpackage.MyModule",
false,
false,
true,
false,
false
)
);
}


2. 确保在MainApplication.java里注册了你的Package:

@Override
protected List getPackages() {
return Arrays.asList(
new MainReactPackage(),
new MyPackage() // 你的Package
);
}


3. 最坑爹的一点:TurboModule要求RN版本0.68+,如果版本不对会静默失败。检查下你的package.json。

4. 如果都对了还是不行,试试清空metro缓存:
npx react-native start --reset-cache

我上次debug这个搞到凌晨3点,最后发现是ReactModuleInfo里的参数填错了。这个错误提示确实不太友好,RN团队应该改进下...
点赞 2
2026-03-06 19:02
Designer°静怡
检查一下你的 TurboModule 的 JS 端绑定有没有漏掉 nativeModules 声明。在 index.js 或调用处加上这行:

import {TurboModuleRegistry} from 'react-native';
const NativeMyModule = TurboModuleRegistry.get('MyModule');


然后确认原生侧的 @TurboModule() 注解类名和 get 方法里传的字符串完全一致,大小写都不能错。
点赞 9
2026-02-09 04:04