Как использовать модуль npm 'events' в Reactjs для eventEmitters - PullRequest
0 голосов
/ 15 марта 2019

Я хочу использовать модуль npm 'events' в своем приложении React. У меня есть игра, разработанная в phaserjs, в которой также есть редактор уровней. «События» будут использоваться для связи с игровым модулем. Структура папок из корня

  • Клиент
    • ЦСИ
      • App.js
      • index.js
      • Компоненты / игра-вид
      • Компоненты / уровень создателя вид
  • Игра
  • Сервер

Кто-то сделал то же самое, но под углом - в его app.js

const eventEmitter = require('events').EventEmitter();
window.eventEmitter = eventEmitter;
eventEmitter.on('loaded', () => { console.log('\n\ncreator loaded\n\n') })

и в других состояниях своего углового приложения он просто взял бы -

const eventEmitter = window.eventEmitter;
eventEmitter.emit('start game');

Вот ссылка на этот проект, посмотрите в модуле браузера, app.js, а также browser / states / createlevel

Я хочу сделать то же самое, мой проект похож, но логика игры другая.

В игровом модуле есть все необходимые настройки для генераторов и слушателей событий

Я попытался настроить window.eventsEmitter () в моем index.js и использовать его в других компонентах. Проблема начинается здесь, как мне использовать ее в классе React или функции, должен ли он быть в конструкторе, или я должен установить его в методах жизненного цикла, или я должен поместить его в совершенно другой файл js и включить его? Я пытался большинство (за исключением последнего), но не получилось.

Я также искал, как это сделать, но не получил именно то, что искал. Любое предложение будет действительно полезным. Заранее спасибо.

1 Ответ

0 голосов
/ 15 марта 2019

Этот синтаксис для EventEmitter, похоже, не работает.Я использовал пример со страницы npm здесь (и это работает) - https://www.npmjs.com/package/events

Добавьте это в App.js:

const eventEmitter = require('events');
window.ee = new eventEmitter();
ee.on('loaded', () => { console.log('\n\ncreator loaded\n\n') })
ee.on('test', () => { console.log('\n\ntest fired\n\n') })

Затем из любого конструктора компонента (или componentdidmount и т. Д.):

constructor( props ) {
    super( props );
    ee.emit('test', 'asdf')
}
...