24

我想使用事件在本机 ios/android 和我的本机应用程序之间进行通信。

我看到了两种方法来做到这一点:DeviceEventEmitter 和 NativeAppEventEmitter,它们似乎相当相同。

他们之间有什么区别?为什么我要选择一个而不是另一个?

4

2 回答 2

11

两者DeviceEventEmitterNativeAppEventEmitter都已弃用,您应该NativeEventEmitter改用。

于 2018-02-07T03:32:14.523 回答
4

我发现在开发需要将事件从 Java/Obj-C 发送到 JavaScript 的跨平台本机扩展时,我需要同时使用这两种扩展。

在 iOS 上,您可以像这样向 JS 发送事件:

[self.bridge.eventDispatcher sendAppEventWithName:@"myProgressEvent" body:@{               
 @"progress": @( (float)loaded / (float)total )
}];

.. 你在 JS 中使用NativeAppEventEmitter.

在 Java 中,您可以通过以下方式向 JS 发送事件:

WritableMap map = Arguments.createMap();
map.putDouble("progress", progress);
getReactApplicationContext().getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
        .emit("myProgressEvent", map);                                                                                   

..你在 JS 中使用DeviceEventEmitter

这并不理想,因为您的 JS 代码需要为要接收的事件选择正确的发射器。

例如

    const emitter = Platform.OS == 'ios' ? NativeAppEventEmitter : DeviceEventEmitter;
    emitter.addListener("myProgressEvent", (e:Event)=>{
        console.log("myProgressEvent " + JSON.stringify(e));
        if (!e) {
            return;
        }
        this.setState({progress: e.progress});
    });                                                                                             
于 2016-04-29T17:45:10.817 回答