Use Controlled State
unlumen-ui/hooks-use-controlled-stateFreeHook
React hook for controlled and uncontrolled component state.
Install it
npx shadcn@latest add https://ui.unlumen.com/r/hooks-use-controlled-state.jsonSource
1import * as React from "react";23interface CommonControlledStateProps<T> {4 value?: T;5 defaultValue?: T;6}78// eslint-disable-next-line @typescript-eslint/no-explicit-any9export function useControlledState<T, Rest extends any[] = []>(10 props: CommonControlledStateProps<T> & {11 onChange?: (value: T, ...args: Rest) => void;12 },13): readonly [T, (next: T, ...args: Rest) => void] {14 const { value, defaultValue, onChange } = props;1516 const [state, setInternalState] = React.useState<T>(17 value !== undefined ? value : (defaultValue as T),18 );1920 React.useEffect(() => {21 if (value !== undefined) setInternalState(value);22 }, [value]);2324 const setState = React.useCallback(25 (next: T, ...args: Rest) => {26 setInternalState(next);27 onChange?.(next, ...args);28 },29 [onChange],30 );3132 return [state, setState] as const;33}
Files it writes
More from Unlumen Ui
All 233 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| useAutoHeighthooks-use-auto-height | Unlumen Ui | Hooks | Free | no deps | |
| useDataStatehooks-use-data-state | Unlumen Ui | Hooks | Free | no deps | |
| useIsInViewhooks-use-is-in-view | Unlumen Ui | Hooks | Free | 1 dep | |
| useMotionValueStatehooks-use-motion-value-state | Unlumen Ui | Hooks | Free | 1 dep |
