UNPKG

@dark-engine/core

Version:

The lightweight and powerful UI rendering engine without dependencies and written in TypeScript (Browser, Node.js, Android, iOS, Windows, Linux, macOS)

49 lines (48 loc) 1.69 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); exports.useState = void 0; const utils_1 = require('../utils'); const use_callback_1 = require('../use-callback'); const use_update_1 = require('../use-update'); const use_memo_1 = require('../use-memo'); const scope_1 = require('../scope'); function createTools(options) { const { get, set, reset, next, shouldUpdate: $shouldUpdate } = options; const tools = () => { const prevValue = get(); const newValue = (0, utils_1.detectIsFunction)(next) ? next(prevValue) : next; const shouldUpdate = () => $shouldUpdate(prevValue, newValue); const setValue = () => set(newValue); const resetValue = () => reset(prevValue); return { shouldUpdate, setValue, resetValue }; }; return tools; } function useState(initialValue) { const update = (0, use_update_1.useUpdate)(); const scope = (0, use_memo_1.useMemo)( () => ({ value: (0, utils_1.detectIsFunction)(initialValue) ? initialValue() : initialValue, }), [], ); const setState = (0, use_callback_1.useCallback)(next => { const $scope = (0, scope_1.$$scope)(); const isBatch = $scope.getIsBatch(); const isForce = $scope.getIsForce(); const getTools = createTools({ next, get: () => scope.value, set: x => (scope.value = x), reset: x => (scope.value = x), shouldUpdate: (p, n) => isBatch || isForce || !(0, utils_1.detectIsEqual)(p, n), }); update({ getTools, setupBatch: isBatch ? () => getTools().setValue() : undefined, }); }, []); return [scope.value, setState]; } exports.useState = useState; //# sourceMappingURL=use-state.js.map