UNPKG

linkmore-design

Version:

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

46 lines β€’ 1.91 kB
import { useMemo, useRef } from 'react'; import { isFunction } from 'ahooks/lib/utils'; import { useMemoizedFn, useUpdate } from 'ahooks'; function useControllableValue() { var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var defaultValue = options.defaultValue, _options$defaultValue = options.defaultValuePropName, defaultValuePropName = _options$defaultValue === void 0 ? 'defaultValue' : _options$defaultValue, _options$valuePropNam = options.valuePropName, valuePropName = _options$valuePropNam === void 0 ? 'value' : _options$valuePropNam, _options$trigger = options.trigger, trigger = _options$trigger === void 0 ? 'onChange' : _options$trigger; var value = props[valuePropName]; var isControlled = props === null || props === void 0 ? void 0 : props.hasOwnProperty(valuePropName); var isControlledOnChange = props[trigger]; var initialValue = useMemo(function () { if (isControlled) { return value; } if (props !== null && props !== void 0 && props.hasOwnProperty(defaultValuePropName)) { return props[defaultValuePropName]; } return defaultValue; }, []); var stateRef = useRef(initialValue); if (isControlled && isControlledOnChange) { stateRef.current = value; } var update = useUpdate(); function setState(v) { var r = isFunction(v) ? v(stateRef.current) : v; if (!isControlledOnChange) { stateRef.current = r; update(); } if (props[trigger]) { for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { args[_key - 1] = arguments[_key]; } props[trigger].apply(props, [r].concat(args)); } } return [stateRef.current, useMemoizedFn(setState)]; } export default useControllableValue;