react-native: ios原生调用js方法

ReactEventEmit.h

#import <React/RCTEventEmitter.h>

#import <React/RCTBridgeModule.h>

@interface ReactEventEmit : RCTEventEmitter<RCTBridgeModule>

-(void)goToCashier:(NSString*) result;

@end


ReactEventEmit.m

#import "ReactEventEmit.h"

@implementation ReactEventEmit

@synthesize bridge = _bridge;

RCT_EXPORT_MODULE(ReactEventEmit);

+ (id)allocWithZone:(NSZone*)zone {

    staticReactEventEmit*sharedInstance =nil;

    staticdispatch_once_tonceToken;

    dispatch_once(&onceToken, ^{

        sharedInstance = [superallocWithZone:zone];

    });

    returnsharedInstance;

}

-(NSArray *)supportedEvents{

    return @[@"goToCashier"];

}

-(void)goToCashier:(NSString*) result

{

    NSLog(@"======== cashierSuccess ========== %@",result);

    [self sendEventWithName:@"goToCashier" body:@{@"result": result}];

}

@end

RN的module初始化是由RN内部实现的,所以我们调用这个实例的时候,必须是这样子:

ReactEventEmit *emit = [ReactEventEmit allocWithZone:nil];

 [emit goToCashier:@"fail"];


JS端调用:

const ReactEventEmit = NativeModules.ReactEventEmit;

const myReactEventEmit = new NativeEventEmitter(ReactEventEmit);

this.listener = myReactEventEmit.addListener('goToCashier', (data: { result: string }) => {

        console.warn('====== cashierSuccess ======= ' + JSON.stringify(data));

        this.process(data.result);

      });

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

相关阅读更多精彩内容

友情链接更多精彩内容