React Native接入TurboModules后原生方法调用失败怎么办?
我最近在尝试把一个原生模块迁移到 TurboModules,按照文档配置了 JSI 和 C++ 接口,但调用时一直报“undefined is not a function”。奇怪的是,同样的逻辑在老版 NativeModules 里能跑通。是不是我漏了什么初始化步骤?
顺便贴一段我在测试时参考的前端调用逻辑(虽然是 Vue 写法,但结构类似):
<template>
<button @click="callNativeMethod">Call TurboModule</button>
</template>
<script>
import { MyTurboModule } from './native/MyTurboModule';
export default {
methods: {
callNativeMethod() {
MyTurboModule.doSomething(); // 这里报错
}
}
}
</script>
TurboModuleBinding,并且通过CxxModule::Builder注册了模块。在 Android 上,检查是否在
MainApplication.java里添加了:iOS 方面,确认在
RCTCxxBridgeDelegate实现里注册了 C++ 模块。关于前端调用部分,注意安全起见,最好先检查模块是否存在:
这能避免 undefined 报错,同时给你一个调试线索。记得清除缓存重新构建项目,有时候改动不会立即生效。