UNPKG

@fruits-chain/react-native-xiaoshu

Version:
45 lines (37 loc) • 1.23 kB
import { useState } from 'react'; import usePersistFn from './usePersistFn'; function useControllableValue() { let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; const { defaultValue, defaultValuePropName = 'defaultValue', valuePropName = 'value', trigger = 'onChange' } = options; const value = props[valuePropName]; const isControlled = (valuePropName in props); const [localValue, setLocalValue] = useState(() => { if (isControlled) { return value; } if (defaultValuePropName in props) { return props[defaultValuePropName]; } return defaultValue; }); const setState = function (v) { if (!isControlled) { setLocalValue(v); } 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](v, ...args); } }; return [isControlled ? value : localValue, usePersistFn(setState)]; } export default useControllableValue; //# sourceMappingURL=useControllableValue.js.map