私の人生にとっては、iOSネイティブからブリッジを越えて反応するネイティブJSコンテキストに正しくイベントを送信できません。 Objective-C側では、ブリッジ経由でイベントを簡単に送信するモジュールを用意したいと考えています。私は次のように、このクラスの持つEventEmitterとその定義があると呼ばれています:反応したネイティブのiosでのイベントのリッスン
// EventEmitter.h
#import "RCTBridge.h"
#import "RCTEventDispatcher.h"
@interface EventEmitter : NSObject<RCTBridgeModule>
- (void)emitEvent:(NSString *) eventName withData:(id) eventData;
@end
と実装:
// EventEmitter.m
#import "EventEmitter.h"
@implementation EventEmitter
RCT_EXPORT_MODULE();
@synthesize bridge = _bridge;
- (void)emitEvent:(NSString *) eventName withData:(id) eventData
{
NSLog(@"emitting %@ with data %@", eventName, [eventData description]);
[[_bridge eventDispatcher] sendDeviceEventWithName:eventName body:eventData];
[[_bridge eventDispatcher] sendAppEventWithName:eventName body:eventData];
}
@end
私はどちらかが仕事を得ることができないので、私はsendDeviceEventとsendAppEventの両方を使用しています。
JSサイドでは、自分のモジュールのグローバル名前空間でこれらのイベントを受け取るように登録します(イベントサブスクリプションはイベントが発生する前に発生することがわかっています)。私のログステートメントで
console.log('ADDING EVENT LISTENERS');
NativeAppEventEmitter.addListener('blah', test => console.log('TEST1', test));
DeviceEventEmitter.addListener('blah', test => console.log('TEST2', test));
私は、次を得る:私はこのような登録
2016-03-19 12:26:42.501 [trace][tid:com.facebook.React.JavaScript] ADDING EVENT LISTENERS
2016-03-19 12:26:43.613 [name redacted][348:38737] emitting blah with data [data redacted]
だから私は、私はタグ何とかしてアプリイベントおよびデバイスイベントの両方を送信し、私だと言うことができますDeviceEventEmitterとNativeAppEventEmittersの両方でblahイベントをリスンするよう登録していますが、リスナーでコールバックされていません。
私は何が間違っていますか?読んでくれてありがとう!
をINITINGながら
が、これはOKになります。 DeviceEventEmitterはreact-native.jsに公開されています。 AppStateモジュールを見てみましょう:https://github.com/facebook/react-native/blob/ad8a33586410c6f9048983f64f8f86e0715e73b8/Libraries/AppState/AppState.js 試してみることができるのは、イベントを送信するサードパーティのモジュールです。そのコードを見てください:https://js.coach/ –
クイック返信マーティンありがとう。私は、NativeAppEventEmitterまたはDeviceEventEmitterのいずれかを使用するサンプルを探していて、それらのすべてが私のものと同じように見えます。私が考えることができるのは、EventEmitterを独自のクラスとして持っているため、emitEventメソッドにアクセスする前に、標準のalloc/initを実行してインスタンスを取得することです。私が自分の言葉でそれを割り当てているという事実は何の効果もありますか? –
[EventEmitter alloc] initによって新しいEventEmitterインスタンスを作成していますか?もしそうなら、emitEventメソッドで_bridgeの値をデバッグできますか? – halilb