import { useState, useCallback } from 'react'; import { useIsMounted } from './use-is-mounted.mjs'; import { frame } from '../frameloop/frame.mjs'; function useForceUpdate() { const isMounted = useIsMounted(); const [forcedRenderCount, setForcedRenderCount] = useState(0); const forceRender = useCallback(() => { isMounted.current && setForcedRenderCount(forcedRenderCount + 1); }, [forcedRenderCount]); /** * Defer this to the end of the next animation frame in case there are multiple * synchronous calls. */ const deferredForceRender = useCallback(() => frame.postRender(forceRender), [forceRender]); return [deferredForceRender, forcedRenderCount]; } export { useForceUpdate };