我想使用事件在本机 ios/android 和我的本机应用程序之间进行通信。
我看到了两种方法来做到这一点:DeviceEventEmitter 和 NativeAppEventEmitter,它们似乎相当相同。
他们之间有什么区别?为什么我要选择一个而不是另一个?
我想使用事件在本机 ios/android 和我的本机应用程序之间进行通信。
我看到了两种方法来做到这一点:DeviceEventEmitter 和 NativeAppEventEmitter,它们似乎相当相同。
他们之间有什么区别?为什么我要选择一个而不是另一个?
两者DeviceEventEmitter
和NativeAppEventEmitter
都已弃用,您应该NativeEventEmitter
改用。
我发现在开发需要将事件从 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});
});