@fruits-chain/react-native-xiaoshu
Version:
🌈 React Native UI library
34 lines (33 loc) • 923 B
JavaScript
;
import { useState } from 'react';
import usePersistFn from "./usePersistFn.js";
function useControllableValue(props = {}, options = {}) {
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 = (v, ...args) => {
if (!isControlled) {
setLocalValue(v);
}
if (props[trigger]) {
props[trigger](v, ...args);
}
};
return [isControlled ? value : localValue, usePersistFn(setState)];
}
export default useControllableValue;
//# sourceMappingURL=useControllableValue.js.map