2016-04-18 11 views
11

イベントを使用してネイティブのios/androidと反応するネイティブアプリ間の通信を行います。DeviceEventEmitterとNativeAppEventEmitterの比較

これを行うには、DeviceEventEmitterとNativeAppEventEmitterの2つの方法があります。これはかなり同じようです。

どういう違いがありますか?なぜ私はもう一方を選ぶべきですか?

答えて

1

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}); 
    });                        
+1

これは間違っているため、これを選択する理由はありません。 iOSのRCTEventDispatcherのsendDeviceEventWithNameとReactネイティブAndroidのcom.facebook.react.modules.core.RCTNativeAppEventEmitterを確認してください。両方のプラットフォームから両方のイベントエミッタに送信できます。 – Rubys

+1

@Rubysああ、私はそれを知らなかった。 AndroidのNativeAppEventEmitterとAndroidのDeviceEventEmitterを使用するネイティブ拡張ドキュメントから直接作業していましたが、それはあまり明確ではありません。 –

+1

うん、それはちょうど私の問題です:) – Rubys

0

両方DeviceEventEmitterNativeAppEventEmitterが廃止され、代わりにNativeEventEmitterを使用する必要があります。

+0

あなたはそれについて知りましたか?私はRNのドキュメンテーションのどこにも見なかった – oliver