linkmore-design
Version:
π πlmη»δ»ΆεΊγπ
47 lines (46 loc) β’ 1.36 kB
JavaScript
;
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;