state-pool
Version:
Transform your React app with our state management library! Declare global and local states like variables, powered by the magic of React hooks 🪄✨
88 lines (87 loc) • 2.93 kB
TypeScript
import { StateInitializer, Selector, Patcher, Reducer, Unsubscribe, StateModifier, StateUpdater, SetState, UpdateState } from './types';
type Refresh = () => void;
type Observer<ST> = (newState: ST) => void;
type Subscriber<ST> = {
observer: Observer<ST>;
selector: Selector<ST>;
refresh?: Refresh;
};
export default class State<T> {
private value;
private subscribers;
constructor(initialValue: StateInitializer<T> | T);
getValue<ST>(selector?: Selector<ST>): T | ST;
refresh(): void;
setValue(newValue: T | StateUpdater<T>): void;
setValue<ST>(newValue: ST | StateUpdater<ST>, config: {
selector?: Selector<ST>;
}): void;
setValue<ST>(newValue: ST | StateUpdater<ST>, config: {
selector?: Selector<ST>;
patcher?: Patcher<ST>;
}): void;
updateValue(stateModifier: StateModifier<T>): void;
updateValue<ST>(stateModifier: StateModifier<ST>, config: {
selector?: Selector<ST>;
}): void;
updateValue<ST>(stateModifier: StateModifier<ST>, config: {
selector?: Selector<ST>;
patcher?: Patcher<ST>;
}): void;
private __updateValue;
subscribe<ST>(itemToSubscribe: Subscriber<T | ST> | Observer<T | ST>): Unsubscribe;
select<ST>(selector: Selector<ST>): DerivedState<T, ST>;
useState(config?: {}): [
state: T,
setState: SetState<T>,
updateState: UpdateState<T>,
stateObject: State<T>
];
useState<ST>(config: {
selector: Selector<ST>;
}): [
state: ST,
setState: SetState<T>,
updateState: UpdateState<T>,
stateObject: State<T>
];
useState<ST>(config: {
selector: Selector<ST>;
patcher: Patcher<ST>;
}): [
state: ST,
setState: SetState<ST>,
updateState: UpdateState<ST>,
stateObject: State<T>
];
useReducer<_T extends T, A>(reducer: Reducer<_T, A>, config?: {}): [
state: _T,
dispatch: (action: A) => void,
stateObject: State<_T>
];
useReducer<ST, A>(reducer: Reducer<ST, A>, config: {
selector: Selector<ST>;
}): [
state: ST,
dispatch: (action: A) => void,
stateObject: State<T>
];
useReducer<ST, A>(reducer: Reducer<ST, A>, config: {
selector: Selector<ST>;
patcher: Patcher<ST>;
}): [
state: ST,
dispatch: (action: A) => void,
stateObject: State<T>
];
}
export declare class DerivedState<T, ST> {
State: State<unknown>;
selector: Selector<ST>;
constructor(State: State<unknown>, selector: Selector<ST>);
getValue(): ST;
subscribe(observer?: Observer<ST>, refresh?: Refresh): Unsubscribe;
}
export declare function createDerivedState<T, ST>(State: State<T>, selector: Selector<ST>): DerivedState<T, ST>;
export declare function createState<T>(initialValue: StateInitializer<T> | T): State<T>;
export {};