UNPKG

@itwin/itwinui-react

Version:

A react component library for iTwinUI

25 lines (24 loc) 734 B
import * as React from 'react'; import { useLatestRef } from './useLatestRef.js'; export const useControlledState = ( initialValue, controlledState, setControlledState, ) => { let [uncontrolledState, setUncontrolledState] = React.useState(initialValue); let state = React.useMemo( () => (void 0 !== controlledState ? controlledState : uncontrolledState), [controlledState, uncontrolledState], ); let oldState = useLatestRef(state); let setState = React.useCallback( (value) => { if (value === oldState.current) return; oldState.current = value; setUncontrolledState(value); setControlledState?.(value); }, [oldState, setControlledState], ); return [state, setState]; };