@nex-ui/hooks
Version:
A collection of React Hooks for Nex UI components.
38 lines (34 loc) • 1.36 kB
JavaScript
"use client";
;
var react = require('react');
var utils = require('@nex-ui/utils');
var useEvent = require('./useEvent.cjs');
function useControlledState(value, defaultValue, onChange) {
const [state, setState] = react.useState(value ?? defaultValue);
const controlled = value !== undefined;
const prevControlledRef = react.useRef(value !== undefined);
react.useEffect(()=>{
const prevControlled = prevControlledRef.current;
if (utils.__DEV__ && prevControlled !== controlled) {
console.error(`Warning: A component changed from ${prevControlled ? 'controlled' : 'uncontrolled'} to ${controlled ? 'controlled' : 'uncontrolled'}.`);
}
prevControlledRef.current = controlled;
}, [
controlled
]);
const setValue = useEvent.useEvent((newValue)=>{
if (utils.isFunction(newValue)) {
console.error("Warning: useControlledState doesn't support function updates, which can cause unexpected behavior. https://github.com/facebook/react/issues/18178#issuecomment-595846312");
}
if (!controlled) {
setState(newValue);
}
onChange?.(newValue);
});
const currentValue = controlled ? value : state;
return [
currentValue,
setValue
];
}
exports.useControlledState = useControlledState;