React Native:本机模块 return 无
React Native : Native modules return nothing
我是 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 什么也得不到。
那么,正确的代码是什么?
哦,是的。我应该知道 。 js 和 native 之间的通信是异步的。桥接到本地方法的js方法,现在不能return任何东西。所以,我们必须向native发送一个回调函数,并在回调中得到正确的答案。
就这些了。
根据反应文档
要向 JavaScript 公开方法,必须使用 @ReactMethod 注释 Java 方法。 return 类型的桥接方法总是无效的。 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);
}
);
ReactMethod 是异步的。因此,如果您想从本机检索数据以响应本机,则需要将方法设置为 return 承诺。
在此处查看文档:https://reactnative.dev/docs/native-modules-android#promises
并且在您的 js 文件中,您需要等待该承诺或设置 then() 函数。
回调也像 Luo 写的那样工作。
我是 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 什么也得不到。
那么,正确的代码是什么?
哦,是的。我应该知道 。 js 和 native 之间的通信是异步的。桥接到本地方法的js方法,现在不能return任何东西。所以,我们必须向native发送一个回调函数,并在回调中得到正确的答案。
就这些了。
根据反应文档
要向 JavaScript 公开方法,必须使用 @ReactMethod 注释 Java 方法。 return 类型的桥接方法总是无效的。 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);
}
);
ReactMethod 是异步的。因此,如果您想从本机检索数据以响应本机,则需要将方法设置为 return 承诺。
在此处查看文档:https://reactnative.dev/docs/native-modules-android#promises
并且在您的 js 文件中,您需要等待该承诺或设置 then() 函数。
回调也像 Luo 写的那样工作。