如何在 Reactjs 中为 eventEmitters 使用 npm 的 'events' 模块

How to use npm's 'events' module in Reactjs for eventEmitters

我想在我的 React 应用程序中使用 npm 的 'events' 模块。我有一个用 phaserjs 开发的游戏,它也有关卡编辑器。 'events' 将用于与游戏模块通信。 来自根目录的文件夹结构

有人做过同样的事情,但在 angular -- 在里面 app.js

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

而在他的 angular 应用程序的其他状态下,他只会采用 --

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

Here's the link to that project, 查看浏览器模块,app.js 以及 browser/states/createlevel

我想做同样的事情,我的项目很相似,但游戏逻辑不同。

游戏模块具有所有必要的事件发射器和侦听器设置

我尝试在我的 index.js 中设置 window.eventsEmitter() 并在其他组件中使用它。问题从这里开始,我如何在 React class 或函数中使用它,它应该在构造函数中还是应该在生命周期方法中设置它,或者我应该把它放在完全不同的 js 文件中并包含它?我尝试了最多(除了最后一个)但失败了。

我也搜索了如何做,但没有找到我正在寻找的东西..任何建议都会很有帮助。提前致谢。

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')
}

另一种方法是创建一个文件eventEmitter.tsx(如果您使用的是打字稿):

import { EventEmitter } from 'events'

const eventEmitter = new EventEmitter()

export default eventEmitter

然后在任何其他文件中都可以包含它。

import eventEmitter from './eventEmitter'

const Hello = () => {
  const someFunction = () => {}
  useEffect(() => {
    eventEmitter.on('your-event', someFunction)
    return () => {
      eventEmitter.off('your-event', someFunction)
    }
  })
}