我可以使用什么方法将本机模块中的事件发送到React Native中的JS

Jer*_*rry 4 javascript reactjs react-native

根据React Native 文档,您可以使用sendAppEventWithName从本机代码向JS发送事件.但在我的XCode中,代码建议告诉我这个方法已被弃用.

在此输入图像描述

问题表明sendDeviceEventWithName应该可以工作,但实际上它也已弃用.

将事件发送给JS的实际方法是什么?

Jer*_*rry 6

更新:请看一下这个问题,其中很多人提供了很多有用的解决方案.


我通过阅读它的源代码来解决这个问题.使用RCTEventEmitter课程.

MyModule.h

#import "RCTEventEmitter.h"
#import "RCTBridgeModule.h"

@interface MyModule : RCTEventEmitter <RCTBridgeModule>

@end
Run Code Online (Sandbox Code Playgroud)

MyModule.m

@implementation MyModule

RCT_EXPORT_MODULE();

- (void)tellJS {
  [self sendEventWithName:@"sayHello" body:@"Hello"];
}

@end
Run Code Online (Sandbox Code Playgroud)

因此,您可以通过调用方法将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))
Run Code Online (Sandbox Code Playgroud)

  • 请注意,您还必须使用此方法,否则您将收到错误: - (NSArray <NSString*>*)supportedEvents {return @ [@"sayHello"]; } (3认同)