reshow-flux
Version:
The smallest react flux and Fast hook alternative
44 lines (40 loc) • 1.49 kB
JavaScript
;
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;