Это простая реализация на основе компонентов для компонентов.
import { EventEmitter } from 'events';
const appEvents = new EventEmitter();
appEvents.setMaxListeners(0);
export default class AppEvents {
static removeEvent(subscribe) {
subscribe.remove();
}
static registerLoginEvent(method) {
return appEvents.addListener('Login-Required-Event', method);
}
static emitLoginEvent(data) {
appEvents.emit('Login-Required-Event', data);
}
static removeLoginEvent(method) {
appEvents.removeListener('Login-Required-Event', method);
}
}
реализация:
import React from 'react';
import AppEvents from './AppEvents';
import AppSwitchNavi from './Navigations';
export default class AppSwitchNaviWrapper extends React.Component {
componentDidMount() {
AppEvents.registerLoginEvent(this.loginEvent);
}
componentWillUnmount() {
AppEvents.removeLoginEvent(this.loginEvent);
}
loginEvent = () => {
// do something
};
render() {
return <AppSwitchNavi />;
}
}
Излучить событие из некоторой ситуации как AppEvents.emitLoginEvent(UserData);
Но, по-моему, для таких ситуаций вы должны обрабатывать избыточность, Redux поможет вам в долгосрочной перспективе. Реализация, основанная на событиях, создает вам проблемы, и вы должны быть очень осторожны с реализацией и удалением события, чтобы предотвратить утечки памяти и непредвиденное поведение приложения.