如何从React Native中的@ReactMethod返回一个布尔值?

sta*_*ner 12 android react-native

我想在reactNative Android应用程序中从@ReactMethod返回一个布尔值.

但是当我制作类似的方法时

@ReactMethod
public boolean retBoolean() {
return true;
}
Run Code Online (Sandbox Code Playgroud)

并从JS组件调用它,它返回undefined.只有当返回类型为void函数被调用时,我才能返回字符串或布尔值.

Jic*_*son 20

根据反应文件

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

所以如果你想返回像布尔值或字符串这样的值,你需要使用回调.

例:

@ReactMethod
public void isEqual(
        int a,
        int b,
        Callback booleanCallback) {
    boolean equal= a == b;
    booleanCallback.invoke(equal);
}
Run Code Online (Sandbox Code Playgroud)

在javascript调用如下...

YourClass.isEqual(
 5,
 10,
 (status) => {
  console.log('Result ',status);
 }
);
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅


Mic*_* T. 14

您也可以使用,而不是使用回调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());
}
Run Code Online (Sandbox Code Playgroud)

然后在你的JS中,调用它

const myFunction = async () => { 
    const hasFlash = await CameraManager.hasFlash(); 
}
Run Code Online (Sandbox Code Playgroud)