2016-05-16 482 views
7

我想在reactNative Android應用程序中從@ReactMethod返回布爾值。如何在React Native中從@ReactMethod返回布爾值?

但是,當我做類似的方法來

@ReactMethod 
public boolean retBoolean() { 
return true; 
} 

和JS組件調用它,則返回undefined。 只有當返回類型爲void時纔會調用函數,我無法返回字符串或布爾值。

回答

13

根據反應文檔

爲了揭露的方法給JavaScript的Java方法必須使用@ReactMethod進行註釋。橋接方法的返回類型總是無效的。反應本地橋是異步的,所以唯一的辦法將結果傳遞給JavaScript是利用回調或發射事件

所以,如果你想返回像布爾或者你需要使用回調字符串一定的價值。

例子:

@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

2

而不是使用回調,你也可以使用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(); 
} 
+0

叫它這似乎是最好的解決辦法 –

+0

哦,所以如何調用返回功能在javascript並獲得Android原生價值迴歸? –