warped_bloc_react
Version:
BLoC like State Management Solution For React
38 lines (32 loc) • 835 B
text/typescript
import Cubit from "./interface/Cubit";
export const DefaultCubit = <T>(
initialState?: T
): Cubit<T> => {
let state: T = initialState;
let count: number = 0;
let listeners: Map<number, Function> = new Map<number, Function>();
const listen = (fn: Function) => {
let cur = count;
listeners.set(cur, fn);
count++;
return cur
}
const removeListener = (count: number) => {
listeners.delete(count)
}
const publishToListeners = (state: T) => {
listeners.forEach((listener) => {
listener(state);
})
}
const emit = (newState: T) => {
state = newState;
publishToListeners(state);
}
return {
state,
listen,
removeListener,
emit
}
}