2016-07-12 2 views
4

Согласно React Native documentation, вы можете использовать sendAppEventWithName для отправки события из собственного кода в JS. Но в моем XCode предложения кода говорят мне, что этот метод устарел.Что я могу использовать для отправки события из собственного модуля в JS в React Native

enter image description here

Это issue указывает, что sendDeviceEventWithName должен работать, но на самом деле это также не рекомендуется.

Каков фактический способ отправки события в JS?

+0

Это устарело, потому что на данный момент вы должны подклассифицировать 'RCTEventEmitter'. К сожалению, я не могу рассказать вам, но вы можете посмотреть в истории хранилища диспетчера событий [здесь] (https://github.com/facebook/react-native/commit/d9737571c43d39af41d539de2dd12c2ceb5cda0e) при изменении # 21 – KRONWALLED

ответ

6

ОБНОВЛЕНИЕ: Пожалуйста, взгляните на 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)) 
+3

Примечание. что у вас также должен быть этот метод, или вы получите сообщение об ошибке: - (NSArray *) supportedEvents { return @ [@ "sayHello"]; } – markrickert

+1

Я был использован как у, упомянутый выше, и потерял все предупреждения, но когда я запустил проект, он разбился и сказал, что Завершение приложения из-за неперехваченного исключения «NSInternalInconsistencyException», причина: «Вы должны переопределить метод' supportedEvents' of ImportingModulesSample ' – Ramakrishna

Смежные вопросы