UNPKG

acud

Version:

acg react 组件库

43 lines • 1.4 kB
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray"; import { useEffect, useRef, useState } from 'react'; export default function useMergedState(defaultStateValue, option) { var _ref = option || {}, defaultValue = _ref.defaultValue, value = _ref.value, onChange = _ref.onChange, postState = _ref.postState; var _useState = useState(function () { if (value !== undefined) { return value; } if (defaultValue !== undefined) { return typeof defaultValue === 'function' ? defaultValue() : defaultValue; } return typeof defaultStateValue === 'function' ? defaultStateValue() : defaultStateValue; }), _useState2 = _slicedToArray(_useState, 2), innerValue = _useState2[0], setInnerValue = _useState2[1]; var mergedValue = value !== undefined ? value : innerValue; if (postState) { mergedValue = postState(mergedValue); } function triggerChange(newValue) { setInnerValue(newValue); if (mergedValue !== newValue && onChange) { onChange(newValue, mergedValue); } } // Effect of reset value to `undefined` var firstRenderRef = useRef(true); useEffect(function () { if (firstRenderRef.current) { firstRenderRef.current = false; return; } if (value === undefined) { setInnerValue(value); } }, [value]); return [mergedValue, triggerChange]; }