【发布时间】:2019-06-01 08:31:14
【问题描述】:
句柄滚动事件会经常触发。减速/去抖动的方法是什么? 如果可能的话,我希望最后一个事件总是被触发而不是被跳过。
const handleScroll = event => {
//how to debounse scroll change?
//if you will just setValue here, it's will lag as hell on scroll
}
useEffect(() => {
window.addEventListener('scroll', handleScroll)
return () => {
window.removeEventListener('scroll', handleScroll)
}
}, [])
这是来自xnimorz 的 useDebounce 挂钩示例
import { useState, useEffect } from 'react'
export const useDebounce = (value, delay) => {
const [debouncedValue, setDebouncedValue] = useState(value)
useEffect(
() => {
const handler = setTimeout(() => {
setDebouncedValue(value)
}, delay)
return () => {
clearTimeout(handler)
}
},
[value, delay]
)
return debouncedValue
}
【问题讨论】:
标签: reactjs debouncing react-hooks debounce