UNPKG

@react-hookz/web

Version:

React hooks done right, for browser and SSR.

32 lines (31 loc) 1.23 kB
"use strict"; 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;