@fruits-chain/react-native-xiaoshu
Version:
🌈 React Native UI library
45 lines (37 loc) • 1.23 kB
JavaScript
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