acud
Version:
acg react 组件库
50 lines (49 loc) • 1.65 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = useMergedState;
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _react = require("react");
function useMergedState(defaultStateValue, option) {
var _ref = option || {},
defaultValue = _ref.defaultValue,
value = _ref.value,
onChange = _ref.onChange,
postState = _ref.postState;
var _useState = (0, _react.useState)(function () {
if (value !== undefined) {
return value;
}
if (defaultValue !== undefined) {
return typeof defaultValue === 'function' ? defaultValue() : defaultValue;
}
return typeof defaultStateValue === 'function' ? defaultStateValue() : defaultStateValue;
}),
_useState2 = (0, _slicedToArray2["default"])(_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 = (0, _react.useRef)(true);
(0, _react.useEffect)(function () {
if (firstRenderRef.current) {
firstRenderRef.current = false;
return;
}
if (value === undefined) {
setInnerValue(value);
}
}, [value]);
return [mergedValue, triggerChange];
}