@react-hookz/web
Version:
React hooks done right, for browser and SSR.
32 lines (31 loc) • 1.23 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.useMediatedState = void 0;
var react_1 = require("react");
var __1 = require("..");
var resolveHookState_1 = require("../util/resolveHookState");
/**
* Like `useState`, but every value set is passed through a mediator function.
*/
function useMediatedState(initialState, mediator) {
var _a = (0, __1.useSafeState)(function () {
return mediator ? mediator((0, resolveHookState_1.resolveHookState)(initialState)) : initialState;
}), state = _a[0], setState = _a[1];
var mediatorRef = (0, __1.useSyncedRef)(mediator);
return [
state,
(0, react_1.useCallback)(function (value) {
if (mediatorRef.current) {
setState(function (prevState) {
var _a;
return (_a = mediatorRef.current) === null || _a === void 0 ? void 0 : _a.call(mediatorRef, (0, resolveHookState_1.resolveHookState)(value, prevState));
});
}
else {
setState(value);
}
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []),
];
}
exports.useMediatedState = useMediatedState;