TurboModules 初始化失败怎么办?

轩辕秋花 阅读 63

我按照官方文档写了 TurboModule,但在 JS 里调用时一直报错说模块未注册,试了 clean 缓存、重装 pod 都不行。

这是我的 JS 调用代码:

import { requireNativeComponent, TurboModuleRegistry } from 'react-native';

const MyModule = TurboModuleRegistry.getEnforcing('MyModule');

export function sayHello() {
  return MyModule?.sayHello();
}

原生那边也实现了 RCT_EXPORT_METHOD 和对应的 .jsi 文件,但就是拿不到模块,到底漏了哪一步?

我来解答 赞 19 收藏
二维码
手机扫码查看
1 条解答
Zz翌菡
Zz翌菡 Lv1
你的 JS 导入方式有问题。TurboModuleRegistry 不是给你直接用的,那是框架内部的东西。

正确做法是直接从 NativeModules 导入:

import { NativeModules } from 'react-native';

const { MyModule } = NativeModules;

export function sayHello() {
return MyModule?.sayHello();
}


然后原生端确保你的模块正确实现了 TurboModule 协议。iOS 这边需要满足这几个条件:

原生头文件要继承 NSObject 并实现 RCTBridgeModule 协议。模块名称要和 JS 端调用的保持一致。方法要用 RCT_EXPORT_METHOD 导出。

还有一个容易漏的点:你需要在 iOS 项目的 Podfile 里确保这个模块被正确 link 了。如果是自己写的原生模块,得确认 podspec 文件存在并且路径配置正确。

另外你说用了 .jsi 文件,那是给新架构用的。如果项目还是老架构(Old Architecture),别用 JSI,直接用传统的 NativeModule 方式就行。

最后检查一下原生代码里模块名是不是写错了,JS 端 'MyModule' 和原生端的模块名要完全一致,包括大小写。
点赞
2026-03-17 02:00