UNPKG

@cp949/mui

Version:

CP949 MUI React component library

23 lines (17 loc) 647 B
import type { Dispatch, SetStateAction } from 'react'; import { useCallback, useRef, useState } from 'react'; import { useUnmount } from './useUnmount.js'; export const useRafState = <S>(initialState: S | (() => S)): [S, Dispatch<SetStateAction<S>>] => { const frame = useRef(0); const [state, setState] = useState(initialState); const setRafState = useCallback((value: S | ((prevState: S) => S)) => { cancelAnimationFrame(frame.current); frame.current = requestAnimationFrame(() => { setState(value); }); }, []); useUnmount(() => { cancelAnimationFrame(frame.current); }); return [state, setRafState]; };