ОБНОВЛЕНИЕ: Пожалуйста, взгляните на this issue, в котором многие люди предоставили много полезных решений.
Я понял это, прочитав его исходный код. Использование класса RCTEventEmitter
.
MyModule.h
#import "RCTEventEmitter.h"
#import "RCTBridgeModule.h"
@interface MyModule : RCTEventEmitter <RCTBridgeModule>
@end
MyModule.m
@implementation MyModule
RCT_EXPORT_MODULE();
- (void)tellJS {
[self sendEventWithName:@"sayHello" body:@"Hello"];
}
@end
Таким образом, вы можете отправить событие называется sayHello
с данными Hello
в JavaScript с помощью вызова метода tellJS
.
На стороне JavaScript вы должны использовать модуль NativeModules
, чтобы получить этот собственный модуль и обернуть его в класс NativeEventEmitter
, чтобы вы могли получать события.
import { NativeModules, NativeEventEmitter } from 'react-native'
const myModuleEvt = new NativeEventEmitter(NativeModules.MyModule)
myModuleEvt.addListener('sayHello', (data) => console.log(data))
Это устарело, потому что на данный момент вы должны подклассифицировать 'RCTEventEmitter'. К сожалению, я не могу рассказать вам, но вы можете посмотреть в истории хранилища диспетчера событий [здесь] (https://github.com/facebook/react-native/commit/d9737571c43d39af41d539de2dd12c2ceb5cda0e) при изменении # 21 – KRONWALLED