Как реализовать EventEmitter?

Middle
268 просмотров
AFK Offer AI

class EventEmitter { constructor() { this.events = {}; } on(event, fn) { (this.events[event] ||= []).push(fn); return this; } off(event, fn) { this.events[event] = this.events[event]?.filter(f => f !== fn); } emit(event, ...args) { this.events[event]?.forEach(fn => fn(...args)); } once(event, fn) { const wrapper = (...args) => { fn(...args); this.off(event, wrapper); }; this.on(event, wrapper); } }. Основа pub/sub паттерна. Node.js EventEmitter аналогичен. Используется для decoupled коммуникации между модулями.

Следующий вопрос

Когда useReducer лучше чем useState?