UNPKG

next-loaders

Version:
33 lines (32 loc) 1.19 kB
/* eslint-disable @typescript-eslint/no-explicit-any */ import { useCallback, useEffect, useRef } from "react"; export default function useThrottle(callback, delay) { var timeoutRef = useRef(); var lastRun = useRef(0); var callbackRef = useRef(callback); useEffect(function () { callbackRef.current = callback; }, [callback]); return useCallback(function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } var now = Date.now(); if (delay <= 0 || Number.isNaN(delay) || !Number.isFinite(delay)) { callbackRef.current.apply(callbackRef, args); return; } if (now - lastRun.current >= delay) { callbackRef.current.apply(callbackRef, args); lastRun.current = now; } else { timeoutRef.current && clearTimeout(timeoutRef.current); timeoutRef.current = setTimeout(function () { callbackRef.current.apply(callbackRef, args); lastRun.current = Date.now(); }, delay - (now - lastRun.current)); } }, [delay]); }