UNPKG

@geezee/react-ui

Version:

Modern and minimalist React UI library.

33 lines (25 loc) 1.12 kB
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray"; import { useState, useCallback } from 'react'; // https://github.com/react-component/util/blob/4045d568885d65a5491ab22347682f5e31da31dc/src/hooks/useMergedState.ts export default function useControlledState(defaultValue, option) { var _ref = option || {}, value = _ref.value, onChange = _ref.onChange, postState = _ref.postState; var _useState = useState(value !== undefined ? value : defaultValue), _useState2 = _slicedToArray(_useState, 2), innerValue = _useState2[0], setInnerValue = _useState2[1]; // controlled take priority of uncontrolled var calcualteValue = value !== undefined ? value : innerValue; if (postState) { calcualteValue = postState(calcualteValue); } // do not change the identity of setValue var setValue = useCallback(function (newValue) { if (!value) { setInnerValue(newValue); } if (calcualteValue !== newValue && onChange) { onChange(newValue, calcualteValue); } }, [onChange, calcualteValue]); return [calcualteValue, setValue]; }