UNPKG

linkmore-design

Version:

🌈 πŸš€lmη»„δ»ΆεΊ“γ€‚πŸš€

47 lines (46 loc) β€’ 1.36 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _react = require("react"); var _utils = require("ahooks/lib/utils"); var _ahooks = require("ahooks"); function useControllableValue(props = {}, options = {}) { const { defaultValue, defaultValuePropName = 'defaultValue', valuePropName = 'value', trigger = 'onChange' } = options; const value = props[valuePropName]; const isControlled = props?.hasOwnProperty(valuePropName); const isControlledOnChange = props[trigger]; const initialValue = (0, _react.useMemo)(() => { if (isControlled) { return value; } if (props?.hasOwnProperty(defaultValuePropName)) { return props[defaultValuePropName]; } return defaultValue; }, []); const stateRef = (0, _react.useRef)(initialValue); if (isControlled && isControlledOnChange) { stateRef.current = value; } const update = (0, _ahooks.useUpdate)(); function setState(v, ...args) { const r = (0, _utils.isFunction)(v) ? v(stateRef.current) : v; if (!isControlledOnChange) { stateRef.current = r; update(); } if (props[trigger]) { props[trigger](r, ...args); } } return [stateRef.current, (0, _ahooks.useMemoizedFn)(setState)]; } var _default = useControllableValue; exports.default = _default;