@orca-fe/hooks
Version:
React Hooks Collections
35 lines (34 loc) • 1.25 kB
JavaScript
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
/* eslint-disable @typescript-eslint/no-explicit-any,react-hooks/rules-of-hooks */
import { useEffect, useRef, useState } from 'react';
import { EventEmitter } from 'events';
export class EventEmitterWithHook {
constructor() {
_defineProperty(this, "eventEmitter", new EventEmitter());
_defineProperty(this, "emit", (eventName, ...args) => {
this.eventEmitter.emit(eventName, ...args);
});
_defineProperty(this, "useSubscription", (eventName, callback) => {
var callbackRef = useRef(callback);
callbackRef.current = callback;
useEffect(() => {
var callbackFn = (...args) => {
if (callbackRef.current) {
callbackRef.current(...args);
}
};
this.eventEmitter.on(eventName, callbackFn);
return () => {
this.eventEmitter.off(eventName, callbackFn);
};
}, []);
});
}
}
export default function useEventEmitter() {
var _useState = useState(() => new EventEmitterWithHook()),
_useState2 = _slicedToArray(_useState, 1),
eventEmitter = _useState2[0];
return eventEmitter;
}