React Native 调用原生模块为什么一直返回 undefined?

Zz振巧 阅读 14

我按照官方文档写了 Android 的 Native Module,但在 JS 里调用方法总是返回 undefined,明明原生那边 Log 都打出来了啊。

我在 JS 里是这样调的:

import { NativeModules } from 'react-native';
const { MyCustomModule } = NativeModules;

MyCustomModule.doSomething((result) => {
  console.log(result); // 这里一直是 undefined
});

原生 Java 方法用了 @ReactMethod 注解,也加了 Promise 和 Callback 的处理,但就是拿不到返回值,是不是导出方式有问题?

我来解答 赞 10 收藏
二维码
手机扫码查看
1 条解答
令狐子璇
遇到这种情况,首先要做校验的是确保你的原生模块和方法都正确地暴露给了 JavaScript。从你的描述来看,原生 Java 方法用了 @ReactMethod 注解,这一步是对的。但是,返回值为 undefined 可能是因为回调函数或者 Promise 的处理出了问题。

先检查一下你的 Java 方法签名。如果你打算使用回调函数,确保回调参数正确传递。如果是用 Promise,记得 resolve 或 reject 后面的逻辑。

假设你使用的是回调,确保你的方法签名类似这样:
@ReactMethod
public void doSomething(Callback callback) {
// 你的逻辑代码
String result = "some result";
if (callback != null) {
callback.invoke(result);
}
}


如果是用 Promise,那么应该是这样的:
@ReactMethod
public void doSomething(Promise promise) {
// 你的逻辑代码
String result = "some result";
promise.resolve(result);
}


另外,检查一下你的 build.gradle 文件和 MainApplication.java 中是否正确注册了这个模块。有时候模块没注册好也会导致找不到方法。

最后,确保你的 React Native 版本和原生模块的版本兼容,有时候版本不一致也会有奇怪的问题。

希望这些信息能帮到你,排查起来可能有点繁琐,但一步步来总能找到原因的。
点赞
2026-03-22 08:01