DeviceEventEmitter 与 NativeAppEventEmitter

Posted

技术标签:

【中文标题】DeviceEventEmitter 与 NativeAppEventEmitter【英文标题】:DeviceEventEmitter vs NativeAppEventEmitter 【发布时间】:2016-04-18 11:16:27 【问题描述】:

我想使用事件在原生 ios/android 和我的 react 原生应用之间进行通信。

我看到有两种方法可以做到这一点:DeviceEventEmitter 和 NativeAppEventEmitter,它们似乎完全一样。

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

【问题讨论】:

【参考方案1】:

DeviceEventEmitterNativeAppEventEmitter都已弃用,您应该改用NativeEventEmitter

【讨论】:

你是从哪里知道的?我在 RN 文档中的任何地方都没有看到这个 任何来源将不胜感激:) 来源:github.com/facebook/react-native/blob/… & github.com/facebook/react-native/blob/…【参考方案2】:

我发现在开发需要将事件从 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);
    );                                                                                             

【讨论】:

这没有理由选择其中之一,因为它是错误的。查看 iOS 的 RCTEventDispatcher 的 sendDeviceEventWithName 和 React Native Android 的 com.facebook.react.modules.core.RCTNativeAppEventEmitter,您可以从两个平台发送到两个事件发射器。 @Rubys 哦,好吧,我不知道。我直接在 Native Extension 文档中工作,该文档在 iOS 上使用 NativeAppEventEmitter,在 Android 上使用 DeviceEventEmitter - 原因还不是很清楚。 是的,这正是我的问题 :)

以上是关于DeviceEventEmitter 与 NativeAppEventEmitter的主要内容,如果未能解决你的问题,请参考以下文章

ReactNative进阶(三十九):DeviceEventEmitter 实现发送和监听消息

iOS 上的 DeviceEventEmitter

SyntaxError - node_modules/react-native/Libraries/polyfills/error-guard.js:缺少分号。 (14:4) 在 react nati

React Native跳转Android原生界面

AAD 声明 UPN 与本地 AD UPN

qcom Android Camera