next-loaders
Version:
Provider server loader for NextJS
24 lines (23 loc) • 868 B
JavaScript
/* eslint-disable @typescript-eslint/no-explicit-any */
import { useCallback, useEffect, useRef } from "react";
export default function useDebounce(callback, delay) {
var timeoutRef = useRef();
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];
}
timeoutRef.current && clearTimeout(timeoutRef.current);
if (delay <= 0 || Number.isNaN(delay) || !Number.isFinite(delay)) {
callbackRef.current.apply(callbackRef, args);
return;
}
timeoutRef.current = setTimeout(function () {
callbackRef.current.apply(callbackRef, args);
}, delay);
}, [delay]);
}