自定义的useDebounce是怎么实现节流的?

发布于 2022-09-13 01:06:50 字数 771 浏览 27 评论 0

题目描述

我在学习react的时候,跟着视频敲了一个自定义的useDebounce Hook,但我不是很明白其运行的原理,想请教一下大家

题目来源及自己的思路

比如我以较快的速度敲入1、2、3,控制台输出如下
image.png
所以当我输入一个数时,是先运行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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

悲凉≈ 2022-09-20 01:06:50

我懂了,是useEffect的原因,useEffect的return是在其销毁后才执行的,而不是跟普通函数一样执行(是我没理解好),所以在下一次调用前才会执行上一次的return进行销毁,而不影响此次的创建

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文