UNPKG

@react-hookz/web

Version:

React hooks done right, for browser and SSR.

28 lines (27 loc) 1.03 kB
import { useCallback } from 'react'; import { useSafeState, useSyncedRef } from '..'; import { resolveHookState } from "../util/resolveHookState.js"; /** * Like `useState`, but every value set is passed through a mediator function. */ export function useMediatedState(initialState, mediator) { var _a = useSafeState(function () { return mediator ? mediator(resolveHookState(initialState)) : initialState; }), state = _a[0], setState = _a[1]; var mediatorRef = useSyncedRef(mediator); return [ state, useCallback(function (value) { if (mediatorRef.current) { setState(function (prevState) { var _a; return (_a = mediatorRef.current) === null || _a === void 0 ? void 0 : _a.call(mediatorRef, resolveHookState(value, prevState)); }); } else { setState(value); } // eslint-disable-next-line react-hooks/exhaustive-deps }, []), ]; }