UNPKG

reshow-flux

Version:
44 lines (40 loc) 1.49 kB
"use strict"; var _interopRequireWildcard = require("reshow-runtime/helpers/interopRequireWildcard"); var _interopRequireDefault = require("reshow-runtime/helpers/interopRequireDefault"); exports.__esModule = true; exports["default"] = void 0; var _react = require("react"); var _useStore = _interopRequireDefault(require("./useStore.js")); var _ImmutableStore = _interopRequireWildcard(require("./ImmutableStore.js")); // @ts-check /** * @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 = (0, _react.useRef)(/** @type any */null); if (!lastReduce.current) { lastReduce.current = (0, _ImmutableStore["default"])(null, initialState); } return [(0, _useStore["default"])(lastReduce.current[0]), lastReduce.current[1]]; }; var _default = exports["default"] = useImmutable; module.exports = exports.default;