如何使用回调编写简单的react-native本机模块

时间:2015-10-25 02:35:26

标签: android react-native

如何以最简单的方式完成这项工作,我无法将回调发送给本地反应,可能我错过了一些东西。

@ReactMethod
public void testCallback(Callback cb) {

String sampleText = "Java is fun";
int textLength = sampleText.length();
    try{
        cb.invoke(textLength);
    }catch (Exception e){
        cb.invoke("err");
    }
}

在反应原生方面

var getNativeCallback = require('react-native-native-callback');


getNativeCallback.testCallback(function (result){
    console.log(result)
})

1 个答案:

答案 0 :(得分:3)

我必须面对同样的问题,最后我必须采取不同的方法,因为显然,@ ReactProp没有接受回调类型。

相反,我使用了'事件'方式,以便从Android原生到React Native的响应通信。

在Android方面,我根据需要设置了一个方便触发的SendEvent函数:

private void sendEventToReactFromAndroid(ReactContext reactContext,String eventName, @Nullable WritableMap params) {
    reactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class).emit(eventName, params);
}

@Override
public void customAndroidListenerFunction() {
    sendEvent(mcontext, "EventName", null);

}

然后在React方面,你会期望这个事件和参数,如果你愿意:

var {DeviceEventEmitter} = require('react-native');
...
componentWillMount: function() {
    DeviceEventEmitter.addListener('EventName', function(e: Event) {
        console.log("Received event loud and clear in the React Native side!");
    });
},
...

希望有所帮助。