@navikt/ds-react
Version:
React components from the Norwegian Labour and Welfare Administration.
22 lines • 1.05 kB
JavaScript
// https://github.com/chakra-ui/chakra-ui/tree/5ec0be610b5a69afba01a9c22365155c1b519136/packages/hooks/use-controllable-state
import { useState } from "react";
import { useCallbackRef } from "./useCallbackRef.js";
/**
* `useControllableState` returns the state and function that updates the state, just like React.useState does.
*/
export function useControllableState({ value: valueProp, defaultValue, onChange, }) {
const onChangeProp = useCallbackRef(onChange);
const [uncontrolledState, setUncontrolledState] = useState(defaultValue);
const controlled = valueProp !== undefined;
const value = controlled ? valueProp : uncontrolledState;
const setValue = useCallbackRef((next) => {
const setter = next;
const nextValue = typeof next === "function" ? setter(value) : next;
if (!controlled) {
setUncontrolledState(nextValue);
}
onChangeProp(nextValue);
}, [controlled, onChangeProp, value]);
return [value, setValue];
}
//# sourceMappingURL=useControllableState.js.map