React Native -- iOS给React Native发送事件

1. 参考中文官网或者英文官网的代码如下:

给Javascript发送事件

即使没有被JavaScript调用,原生模块也可以给JavaScript发送事件通知。最好的方法是继承RCTEventEmitter,实现suppportEvents方法并调用self sendEventWithName:。

OC端:

RN端:


只是简简单单的几行代码,作为新手根本无法 calendarEventReminderReceived 这个方法到底如何使用?也没有明确的说明

2.下面我来完完整整的实现了一下iOS端给RN端发送事件:

iOS端:

// xxx.h 

#import<React/RCTEventEmitter.h>

#import<React/RCTEventEmitter.h>

@interface RNPushEvent : RCTEventEmitter<RCTBridgeModule>

@end

//xxx.m

#import "RNPushEvent.h"

@implementation RNPushEvent

RCT_EXPORT_MODULE();

- (NSArray<NSString *> *)supportedEvents

{

  return @[@"EventReminder"];

}

-(void)startObserving{

  [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(emitEventInternal:) name:@"event-emited" object:nil];

}

-(void)stopObserving{

  [[NSNotificationCenter defaultCenter]removeObserver:self];

}

-(void)emitEventInternal:(NSNotification*)notification{

  [self sendEventWithName:@"EventReminder" body:notification.userInfo];

}

+ (void)emitEventWithName:(NSString*)name andPayload:(NSDictionary*)payload

{

  [[NSNotificationCenter defaultCenter] postNotificationName:@"event-emitted"

                                                      object:self

                                                    userInfo:payload];

}

@end

RN端:

import React,{Component} from 'react';

import {

  ·

  ·

  ·

  NativeModules,

  NativeEventEmitter,

} from 'react-native';

const {RNPushEvent} = NativeModules

const rnPushEventEmitter = new NativeEventEmitter(RNPushEvent)

componentDidMount() {

        rnPushEventEmitter.addListener('EventReminder',(data)=> console.log("EventReminder:",data));

    }

componentWillUnmount(){

        this.rnPushEventEmitter.remove()

    }

然后就是发送NSNotification的地方了,在需要传递事件的地方执行以下代码即可:

[[NSNotificationCenter defaultCenter]postNotificationName:@"event-emited" object:nil userInfo:@{@"name":@"notification coming "}];

大功告成~~

PS:第一次写,排版有点乱, 谅解下

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容