@react-hookz/web
Version:
React hooks done right, for browser and SSR.
29 lines (28 loc) • 1.14 kB
JavaScript
;
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;