zustand-utils
Version:
some utils for zustand
42 lines (39 loc) • 1.92 kB
JavaScript
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.createStoreUpdater = void 0;
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _fastDeepEqual = _interopRequireDefault(require("fast-deep-equal"));
var _react = require("react");
/**
* 该函数接收四个参数:key,value 、 deps setStoreState
* @param {key}:需要更新的 Store 中的 key
* @param value:需要更新的值
* @param deps:依赖项数组,默认为 [value]
* @param setStoreState:一个可选的回调函数,用于更新 Store 状态
*/
// 定义一个函数,用于创建 Store 更新器
var createStoreUpdater = exports.createStoreUpdater = function createStoreUpdater(storeApi) {
return function (key, value) {
var deps = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [value];
var setStateFn = arguments.length > 3 ? arguments[3] : undefined;
// 获取 Store 更新函数
var setState = setStateFn !== null && setStateFn !== void 0 ? setStateFn : storeApi.setState;
// 使用 useEffect 监听依赖项变化
(0, _react.useEffect)(function () {
// 如果 value 不为 undefined,就更新 Store 中的指定 key 的值
if (typeof value !== 'undefined') {
var _storeApi$getState;
var _state = (_storeApi$getState = storeApi.getState) === null || _storeApi$getState === void 0 ? void 0 : _storeApi$getState.call(storeApi);
if ((0, _fastDeepEqual.default)(_state === null || _state === void 0 ? void 0 : _state[key], value)) return;
// @ts-ignore
setState((0, _defineProperty2.default)({}, key, value), false, {
type: "\uD83D\uDCAD useStoreUpdater / ".concat(key),
payload: value
});
}
}, deps);
};
};
;