UNPKG

reshow-flux

Version:
38 lines (34 loc) 1.1 kB
// @ts-check import { useRef } from "react"; import useStore from "./useStore.mjs"; import ImmutableStore, { StateMap } from "./ImmutableStore.mjs"; /** * @typedef {import("reshow-flux-base").ActionObject} ActionObject */ /** * @template StateType * @typedef {import("reshow-flux-base").InitStateType<StateType>} InitStateType */ /** * useState alternative but implement by Immutable. * https://reactjs.org/docs/hooks-reference.html#usestate * * * ## Base usage * const [state, setState] = useImmutable(initialState); * * call setState will trigger re-render. * could use setState for partial update. * * @template [StateType=StateMap] * @param {InitStateType<StateType>} [initialState] * @returns {[StateMap, import("reshow-flux-base").DispatchFunction<StateMap, ActionObject>]} */ var useImmutable = function useImmutable(initialState) { var lastReduce = useRef(/** @type any */null); if (!lastReduce.current) { lastReduce.current = ImmutableStore(null, initialState); } return [useStore(lastReduce.current[0]), lastReduce.current[1]]; }; export default useImmutable;