React Native:本机模块不返回任何内容

Posted

技术标签:

【中文标题】React Native:本机模块不返回任何内容【英文标题】:React Native : Native modules return nothing 【发布时间】:2015-12-25 06:42:02 【问题描述】:

我是 React Native 的新手,我想调用原生模块从 android 获取一些字符串。我这样写代码:

@ReactMethod
public String getToken() 
    String token = "";
    //then take the token
    Log.i("getToken:", token);
    return token;

然后在js中使用。

var tokenString = thismodule.getToken();

但是,当我在 js 中调用该方法时。我在 logcat 中可以看到正确的日志“I/getToken : palapalapala”,但是 js 什么都得不到。

那么,正确的代码是什么?

【问题讨论】:

【参考方案1】:

哦,是的。我应该知道 。 js和native之间的通信是异步的。桥接本机方法的js方法,现在什么都不能返回。所以,我们必须向native发送一个回调函数,并在回调中得到正确的答案。

就是这样。

【讨论】:

您能否举例说明我们如何做到这一点?【参考方案2】:

根据反应文档

要向 javascript 公开方法,必须使用 @ReactMethod 注释 Java 方法。桥接方法的返回类型始终为 void。 React Native 桥接器是异步的,因此将结果传递给 JavaScript 的唯一方法是使用回调或发出事件

@ReactMethod
public void getToken(Callback callback) 
    String token = "";
    //then take the token
    Log.i("getToken:", token);
    callback.invoke(token);


thismodule.getToken((token) => 
  console.log('Result ',token);
 
);

【讨论】:

以上是关于React Native:本机模块不返回任何内容的主要内容,如果未能解决你的问题,请参考以下文章

错误:传感器的本机模块不可用。 react-native 链接是不是运行成功?

React Native 模块中的依赖注入

初始化本机ReactLocalization模块时出错了。请检查您的配置:您是否运行'react-native link'?

在本机 ios 中找不到模块“react-native-reanimated/plugin”

如何正确模拟使用本机代码的 React Native 模块?

错误 [React Native]:渲染没有返回任何内容