本文共 2700 字,大约阅读时间需要 9 分钟。
就给我们这几句话 就打发我们了。
#import#import @interface EventEmitterManager : RCTEventEmitter @end
EventEmitterManager.m
#import "EventEmitterManager.h"#import#import NSString *const kEventEmitterManagerEvent = @"EventEmitterManagerEvent";@implementation EventEmitterManager//@synthesize bridge = _bridge;RCT_EXPORT_MODULE();// 等 RN组件 监听事件通知后 在发送事件通知RCT_EXPORT_METHOD(postNotificationEvent:(NSString *)name){ RCTLogInfo(@"postNotificationEvent->:%@",name); [self sendEventWithName:kEventEmitterManagerEvent body:name];}- (NSDictionary *)constantsToExport { return @{ @"EventEmitterManagerEvent": kEventEmitterManagerEvent, };}- (NSArray *)supportedEvents { return @[kEventEmitterManagerEvent,];}@end
RN组件:
componentWillMount(){ // 拿到原生模块 var EventEmitterManager = NativeModules.EventEmitterManager; // 创建自定义事件接口 const eventEmitterManagerEmitter = new NativeEventEmitter(EventEmitterManager); // 导出常量 const EventEmitterManagerEvent = EventEmitterManager.EventEmitterManagerEvent; // 监听原生 发送的通知 this.listener = eventEmitterManagerEmitter.addListener( EventEmitterManagerEvent, (data) => Alert.alert('来了 来了 ->'+ data) ); } componentDidMount() { var EventEmitterManager = NativeModules.EventEmitterManager; // 调用原生模块 postNotificationEvent方法 EventEmitterManager.postNotificationEvent('张杨事件传递'); } componentWillUnmount(){ this.listener.remove(); }
- (IBAction)postNotification:(id)sender { _jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"src/PostNotification" fallbackResource:nil]; _rootView = [[RCTRootView alloc] initWithBundleURL : _jsCodeLocation moduleName : @"PostNotification" initialProperties : nil launchOptions : nil]; UIViewController *vc = [[UIViewController alloc] init]; vc.view = _rootView; [self.navigationController pushViewController:vc animated:YES];}