我想在reactNative Android应用程序中从@ReactMethod返回一个布尔值。
但是当我制作类似于
的方法时@ReactMethod
public boolean retBoolean() {
return true;
}
并从JS组件调用它,它返回undefined。 只有当返回类型为void函数被调用时,我才能返回字符串或布尔值。
答案 0 :(得分:18)
根据反应文件
要向JavaScript公开方法,必须使用@ReactMethod注释Java方法。桥接方法的返回类型始终无效。 React Native桥是异步的,因此将结果传递给JavaScript的唯一方法是使用回调或发出事件
因此,如果你想返回一些像boolean或string这样的值,你需要使用回调。
示例:
@ReactMethod
public void isEqual(
int a,
int b,
Callback booleanCallback) {
boolean equal= a == b;
booleanCallback.invoke(equal);
}
在下面的javascript调用中......
YourClass.isEqual(
5,
10,
(status) => {
console.log('Result ',status);
}
);
有关详细信息,请参阅this
答案 1 :(得分:12)
您也可以使用Promise
。
import com.facebook.react.bridge.Promise;
@ReactMethod
public void hasFlash(final Promise promise) {
Camera camera = RCTCamera.getInstance().acquireCameraInstance();
if (null == camera) {
promise.reject("No camera found.");
return;
}
List<String> flashModes = camera.getParameters().getSupportedFlashModes();
promise.resolve(null != flashModes && !flashModes.isEmpty());
}
然后在你的JS中,用
调用它const myFunction = async () => {
const hasFlash = await CameraManager.hasFlash();
}