如何在 react-native 中使用 RCTEventEmitter 接收事件回调

天才小*_*小飞猫 4 javascript react-native

将 react-native 代码从 0.28 更新到 0.30 后,子类化RCTEventEmitter是将事件发送回 Javascript 的推荐方式,旧方式已弃用。

- (void)startObserving{}

- (void)stopObserving{}

- (NSArray<NSString *> *)supportedEvents{

    return @[@"someInterestingEvent"];
}

-(void)interestingEventHappen{
    [self sendEventWithName:@"someInterestingEvent" body:nil];
}
Run Code Online (Sandbox Code Playgroud)

问题是我如何接收回调而不是仅仅注册事件。我注意到公开了RCTEventEmitter方法RCT_EXPORT_METHOD(addListener:(NSString *)eventName),但它只接收一个参数(事件名称)。我试过文档:

NativeAppEventEmitter.addListener('someInterestingEvent', ()=>{});

没有结果,黄色框抱怨发送 someInterestingEvent在没有注册听众的情况下。

我错过了什么?

天才小*_*小飞猫 5

这个问题已经在github上讨论过了。

简而言之,您必须使用NativeModules模块来获取此本机模块并将其包装在NativeEventEmitter类中,以便您可以接收事件。

import { NativeModules, NativeEventEmitter } from 'react-native'

const myModuleEvt = new NativeEventEmitter(NativeModules.MyModule)
myModuleEvt.addListener('sayHello', (data) => console.log(data))
Run Code Online (Sandbox Code Playgroud)