React Native接入TurboModules后原生方法调用失败怎么办?

公孙馨月 阅读 4

我最近在尝试把一个原生模块迁移到 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>
我来解答 赞 2 收藏
二维码
手机扫码查看
1 条解答
闲人誉馨
看起来问题可能出在 TurboModule 的注册和初始化阶段。首先确保在原生端正确实现了 TurboModuleBinding,并且通过 CxxModule::Builder 注册了模块。

在 Android 上,检查是否在 MainApplication.java 里添加了:

SoLoader.init(this, /* native exopackage */ false);
TurboModuleManagerDelegate.getReactPackageTurboModuleProxies().put("MyTurboModule", MyTurboModuleSpec.Proxy.class);


iOS 方面,确认在 RCTCxxBridgeDelegate 实现里注册了 C++ 模块。

关于前端调用部分,注意安全起见,最好先检查模块是否存在:
callNativeMethod() {
if (global.MyTurboModule && typeof global.MyTurboModule.doSomething === 'function') {
global.MyTurboModule.doSomething();
} else {
console.warn('TurboModule not available');
}
}

这能避免 undefined 报错,同时给你一个调试线索。记得清除缓存重新构建项目,有时候改动不会立即生效。
点赞
2026-03-29 15:23