イベントを使用してネイティブのios/androidと反応するネイティブアプリ間の通信を行います。DeviceEventEmitterとNativeAppEventEmitterの比較
これを行うには、DeviceEventEmitterとNativeAppEventEmitterの2つの方法があります。これはかなり同じようです。
どういう違いがありますか?なぜ私はもう一方を選ぶべきですか?
イベントを使用してネイティブのios/androidと反応するネイティブアプリ間の通信を行います。DeviceEventEmitterとNativeAppEventEmitterの比較
これを行うには、DeviceEventEmitterとNativeAppEventEmitterの2つの方法があります。これはかなり同じようです。
どういう違いがありますか?なぜ私はもう一方を選ぶべきですか?
Java/Obj-CからJavaScriptにイベントを送信する必要のあるクロスプラットフォームのネイティブ拡張を開発する際に、両方を使用する必要があることがわかりました。あなたがNativeAppEventEmitter
を使用してJSに拾う
[self.bridge.eventDispatcher sendAppEventWithName:@"myProgressEvent" body:@{
@"progress": @((float)loaded/(float)total)
}];
..:iOSの上で
あなたはこのようにJSにイベントを送信します。
あなたとJSにイベントを送るJavaでは:あなたのJSコードは、右 エミッタを選択する必要があるとして、それは、理想的ではないのですDeviceEventEmitter
を使用してJSに拾う
WritableMap map = Arguments.createMap();
map.putDouble("progress", progress);
getReactApplicationContext().getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
.emit("myProgressEvent", map);
..受け取るべきイベントのために。
など。
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});
});
両方DeviceEventEmitter
とNativeAppEventEmitter
が廃止され、代わりにNativeEventEmitter
を使用する必要があります。
あなたはそれについて知りましたか?私はRNのドキュメンテーションのどこにも見なかった – oliver
これは間違っているため、これを選択する理由はありません。 iOSのRCTEventDispatcherのsendDeviceEventWithNameとReactネイティブAndroidのcom.facebook.react.modules.core.RCTNativeAppEventEmitterを確認してください。両方のプラットフォームから両方のイベントエミッタに送信できます。 – Rubys
@Rubysああ、私はそれを知らなかった。 AndroidのNativeAppEventEmitterとAndroidのDeviceEventEmitterを使用するネイティブ拡張ドキュメントから直接作業していましたが、それはあまり明確ではありません。 –
うん、それはちょうど私の問題です:) – Rubys