useEventEmitter
A basic eventemitter.
Usage
import { useEventEmitter } from "@reactuses/core";
import { IDisposable } from "@reactuses/core/hooks/useEventEmitter";
import { useEffect, useRef, useState } from "react";
const Demo = () => {
const [state, setState] = useState(0);
const [event, fire, dispose] = useEventEmitter<number>();
const event1 = useRef<IDisposable>();
useEffect(() => {
event((val) => {
setState(s => s + val);
});
event1.current = event(val => setState(s => s + val + 10));
}, [event]);
return (
<div>
<div>state: {state}</div>
<button onClick={() => fire(1)}>fire</button>
<button onClick={() => dispose()}>disposeALL</button>
<button onClick={() => event1.current?.dispose()}>disposeOne</button>
</div>
);
};
Example
state: 0
Type Declarations
export interface IListener<T, U = void> {
(arg1: T, arg2: U): void
}
export interface IDisposable {
dispose(): void
}
export interface IEvent<T, U = void> {
(listener: (arg1: T, arg2: U) => any): IDisposable
}
export interface IEventOnce<T, U = void> {
(listener: (arg1: T, arg2: U) => any): void
}
export interface UseEventEmitterReturn<T, U = void> {
/**
* Subscribe to an event. When calling emit, the listeners will execute.
* @param listener watch listener.
* @returns a stop function to remove the current callback.
*/
event: IEvent<T, U>
/**
* fire an event, the corresponding event listeners will execute.
* @param event data sent.
*/
fire: (arg1: T, arg2: U) => void
/**
* Remove all corresponding listener.
*/
dispose: () => void
}
export default function useEventEmitter<T, U = void>(): readonly [
IEvent<T, U>,
(arg1: T, arg2: U) => void,
() => void
]