UNPKG

@lesnoypudge/utils-react

Version:

lesnoypudge's utils-react

37 lines (36 loc) 1.2 kB
import { useBoolean } from "../useBoolean/useBoolean.js"; import { useFunction } from "../useFunction/useFunction.js"; import { useLatest } from "../useLatest/useLatest.js"; import { useUnmountEffect } from "../useUnmountEffect/useUnmountEffect.js"; import { useRef } from "react"; const useDebounce = (options = {}) => { const debounceState = useBoolean(false); const isDebouncingRef = useRef(debounceState.value); const timeoutRef = useRef(); const lastOptionsRef = useLatest(options); const shouldUpdateState = !lastOptionsRef.current.stateless; const debounce = useFunction((callback, delay) => { return (...args) => { clearTimeout(timeoutRef.current); isDebouncingRef.current = true; shouldUpdateState && debounceState.setTrue(); timeoutRef.current = setTimeout(() => { callback(...args); isDebouncingRef.current = false; shouldUpdateState && debounceState.setFalse(); }, delay); }; }); useUnmountEffect(() => { clearTimeout(timeoutRef.current); }); return { isDebouncing: debounceState.value, isDebouncingRef, debounce }; }; export { useDebounce }; //# sourceMappingURL=useDebounce.js.map