UNPKG

@nex-ui/hooks

Version:

A collection of React Hooks for Nex UI components.

38 lines (34 loc) 1.36 kB
"use client"; 'use strict'; 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;