UNPKG

@react-hookz/web

Version:

React hooks done right, for browser and SSR.

25 lines (24 loc) 913 B
import { useCallback, useRef } from 'react'; import { useFirstMountState, useRerender } from '..'; import { resolveHookState } from "../util/resolveHookState.js"; /** * Like `React.useState`, but its state setter accepts extra argument, that allows to cancel * rerender. */ export function useControlledRerenderState(initialState) { var state = useRef(useFirstMountState() ? resolveHookState(initialState) : undefined); var rr = useRerender(); return [ state.current, useCallback(function (value, rerender) { var newState = 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 }, []), ]; }