UNPKG

@react-hookz/web

Version:

React hooks done right, for browser and SSR.

29 lines (28 loc) 1.14 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.useControlledRerenderState = void 0; var react_1 = require("react"); var __1 = require(".."); var resolveHookState_1 = require("../util/resolveHookState"); /** * Like `React.useState`, but its state setter accepts extra argument, that allows to cancel * rerender. */ function useControlledRerenderState(initialState) { var state = (0, react_1.useRef)((0, __1.useFirstMountState)() ? (0, resolveHookState_1.resolveHookState)(initialState) : undefined); var rr = (0, __1.useRerender)(); return [ state.current, (0, react_1.useCallback)(function (value, rerender) { var newState = (0, resolveHookState_1.resolveHookState)(value, state.current); if (newState !== state.current) { state.current = newState; if (typeof rerender === 'undefined' || rerender) { rr(); } } // eslint-disable-next-line react-hooks/exhaustive-deps }, []), ]; } exports.useControlledRerenderState = useControlledRerenderState;