import EventEmitter from "events"; import { IsActive, NodeJsListenerFn } from "./nodejs-types"; /** * In React, emitters can't invoke callback functions that are part of a function component. * Even though hooks look like normal functions, there are lots of restrictions on them. A big * one is that only React function components can call hooks. This leads to a problem that shows * up when you need to have an external (to React) event emitter generate an event that needs to * be dispatched to a function component. This emitter can't directly call into React code! * * The solution is using this hook as an intermediary / proxy. Internally, this hook maintains a * state that gets updated by the external (to React) emitter, and then an effect (which marks * this as a dependency) that actually calls into your React component callback function. This * article on developerlife.com explains this in much greater detail: * http://developerlife.com/2021/10/19/react-hooks-redux-typescript-handbook/#custom-hooks * * Here are some more resources related to this: * https://stackoverflow.com/questions/53898810/executing-async-code-on-update-of-state-with-react-hooks * https://github.com/r3bl-org/r3bl-ts-utils/commit/a3248540ea325d3896ee56a84d003f15529169cd * https://github.com/r3bl-org/r3bl-ts-utils/commit/1f3cbb2b4988f44c6ea48233db1730e10f18dc60 */ export declare const useEventEmitter: (emitter: EventEmitter, eventName: string, eventHandler: NodeJsListenerFn, options: IsActive) => void;