import { useEffect, useState } from "preact/hooks";
/**
* 防抖Hook
* @param value 需要防抖的值
* @param delay 延迟时间(毫秒)
* @returns 防抖后的值
*/
export function useDebounce<T>(value: T, delay: number): T {
const [debouncedValue, setDebouncedValue] = useState<T>(value);
useEffect(() => {
// 设置定时器
const handler = setTimeout(() => {
setDebouncedValue(value);
}, delay);
// 清理函数:如果value或delay改变,清除之前的定时器
return () => {
clearTimeout(handler);
};
}, [value, delay]);
return debouncedValue;
}
/**
* 防抖回调Hook
* @param callback 需要防抖的回调函数
* @param delay 延迟时间(毫秒)
* @param deps 依赖数组
* @returns 防抖后的回调函数
*/
export function useDebouncedCallback<T extends (...args: unknown[]) => unknown>(
callback: T,
delay: number,
deps: unknown[] = [],
): T {
const [debouncedCallback, setDebouncedCallback] = useState<T>(() => callback);
useEffect(() => {
const handler = setTimeout(() => {
setDebouncedCallback(() => callback);
}, delay);
return () => {
clearTimeout(handler);
};
}, [callback, delay, ...deps]);
return debouncedCallback;
}
|