【问题标题】:How to write a simple react-native native module with a callback如何使用回调编写一个简单的 react-native 本机模块
【发布时间】:2015-10-25 02:35:25
【问题描述】:

如何以最简单的方式完成这项工作,我无法将回调发送到 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)
})

【问题讨论】:

  • 你遇到了什么错误?
  • 我已经解决了,只需要通过启动 reactContenx .startActivity 来桥接 reactContenx,但是我还没有发布我自己的解决方案
  • 能否请您发布您的解决方案?
  • github.com/amalChandran/ReactNative_Android_integration 获取与回调相关的示例。

标签: android react-native


【解决方案1】:

我不得不面对同样的问题,最后我不得不采取不同的方法,显然,@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!");
    });
},
...

希望对您有所帮助。

【讨论】:

  • 您好,我对此毫无疑问。我们可以在这里谈谈吗?我有这个问题。我想向android native发送一些参数并同时获取一些对象和参数。
  • 您好,您查看过 RN 官方页面Native Modules Android 吗?特别是Android React Native callbacks
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-25
  • 2019-03-19
  • 1970-01-01
  • 2017-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多