export const useDebounce = (value, delay) => {
const [debounceValue, setDebounceValue] = useState(value)
useEffect(() => {
// 每次在value变化以后,设置一个定时器
const timeout = setTimeout(() => setDebounceValue(value), delay)
// 每次value变化,在上一个useEffect出口完后执行,清除上一个定时器
return () => clearTimeout(timeout)
}, [value, delay])
return debounceValue
}
使用:
import { useDebounce } from ‘…/…/utils’
const debounceParam = useDebounce(param, 2000)
useEffect(() => {
fetch(`${apiUrl}/projects?${qs.stringify(cleanObject(debounceParam))}`).then(async res => {
if (res.ok) setList(await res.json())
})
}, [debounceParam])