import { useEffect, useState } from 'react' /** * 防抖Hook - 延迟更新值直到用户停止输入 * @param value 需要防抖的值 * @param delay 延迟时间(毫秒) * @returns 防抖后的值 */ export function useDebounce(value: T, delay: number = 300): T { const [debouncedValue, setDebouncedValue] = useState(value) useEffect(() => { // 设置定时器 const handler = setTimeout(() => { setDebouncedValue(value) }, delay) // 清理函数:如果value在delay时间内再次改变,清除之前的定时器 return () => { clearTimeout(handler) } }, [value, delay]) return debouncedValue } /** * 防抖回调Hook - 创建一个防抖的回调函数 * @param callback 需要防抖的回调函数 * @param delay 延迟时间(毫秒) * @returns 防抖后的回调函数 */ export function useDebouncedCallback any>( callback: T, delay: number = 300 ): (...args: Parameters) => void { const [timeoutId, setTimeoutId] = useState(null) useEffect(() => { // 组件卸载时清理定时器 return () => { if (timeoutId) { clearTimeout(timeoutId) } } }, [timeoutId]) return (...args: Parameters) => { // 清除之前的定时器 if (timeoutId) { clearTimeout(timeoutId) } // 设置新的定时器 const newTimeoutId = setTimeout(() => { callback(...args) setTimeoutId(null) }, delay) setTimeoutId(newTimeoutId) } }