请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

老师,为什么用普通的闭包防抖函数作为useEffect的回调函数不起作用?

似乎每次触发Effect钩子都是重新创建了一个回调函数,所以每次timer都是新的,导致不会进入clearTimeout的判断,我的理解对吗? 老师的课程似乎并不涉及API的原理,看得有些吃力呢。

正在回答 回答被采纳积分+3

3回答

梓梁92 2021-11-15 23:45:58

看图说话

0 回复 有任何疑惑可以回复我~
提问者 慕粉3118661 2021-04-04 16:46:11

https://img1.sycdn.imooc.com//szimg/60697cb90939b73211030599.jpg

为什么useDebounce中的useEffect可以监听到作为参数被传入的value和delay的变化呢?难道value和delay其实是引用对象吗?

0 回复 有任何疑惑可以回复我~
  • ![](https://meiliang-1258667848.cos.ap-shanghai.myqcloud.com/markdown/202111152345995.png)
    回复 有任何疑惑可以回复我~ 2021-11-15 23:45:18
Nolan 2021-04-03 15:14:26

hi,clearTimeout 每次都会发生的,这样就可以让上次的setTimeout里的回调函数不发生

0 回复 有任何疑惑可以回复我~
  • 提问者 慕粉3118661 #1
    老师,为什么useDebounce中的useEffect可以监听到作为参数被传入的value和delay的变化呢?难道value和delay其实是引用对象吗?
    回复 有任何疑惑可以回复我~ 2021-04-04 16:43:33
  • Nolan 回复 提问者 慕粉3118661 #2
    这个他们是不是引用对象没关系啊。。。useEffect第二个参数本来就是做这件事的,监听变量变化
    回复 有任何疑惑可以回复我~ 2021-04-04 17:36:21
  • 提问者 慕粉3118661 回复 Nolan #3
    但是我认为value和delay这两个变量的值在作为参数传入useDebounce函数之后应该就属于函数作用域中的变量,函数外的同名变量再怎么变也影响不到函数里面的值了吧?
    回复 有任何疑惑可以回复我~ 2021-04-04 18:59:08
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信