自定义的useDebounce是怎么实现节流的?
题目描述
我在学习react的时候,跟着视频敲了一个自定义的useDebounce Hook,但我不是很明白其运行的原理,想请教一下大家
题目来源及自己的思路
比如我以较快的速度敲入1、2、3,控制台输出如下
所以当我输入一个数时,是先运行return的销毁吗,还是先运行定时器的建立,为什么在敲完最后一个数时,不会把敲完后建立的定时器销毁?这跟任务队列有关吗?为什么页面初始化时输出的定时器已建立之前没有定时器已销毁?
相关代码
export const useDebounce = (value, delay) => {
const [debouncedValue, setDebouncedValue] = useState(value)
useEffect(() => {
const timeout = setTimeout(() => {
setDebouncedValue(value)
console.log('定时器已建立')
}, delay)
return () => {
clearTimeout(timeout)
console.log('定时器已销毁')
}
}, [value, delay])
return debouncedValue
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我懂了,是useEffect的原因,useEffect的return是在其销毁后才执行的,而不是跟普通函数一样执行(是我没理解好),所以在下一次调用前才会执行上一次的return进行销毁,而不影响此次的创建