请稍等 ...
×

采纳答案成功!

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

为什么 useCallback 要传入依赖

  const handleClick = useCallback(() =>{
    setName()
  }, [name])

这个为什么非要我传入 name,才能使用 setName,我没太理解这样设计的原因是什么,正常需求不会需要 name 改变的时候生成一个新的 handleClick ,函数内容又不会变。

我看到 useEffect 也是建议传入依赖的,但和 useCallback 不一样的是,不传也能用,useCallback是不传根本用不了
那假如我有个需求是,计数,当 a 改变时候,count 加1
那我需要把 a 当做依赖监听 a 的变换,让count 加1,那如果它要求我把 count 也当依赖,不就成死循环了

  useEffect(() => {
    setCount(count + 1)
  }, [a, count])

而且这样,这个数组的职责也不单一,它即表示在监听哪个值得变化,还要表示里面的依赖,这俩依赖不是同一回事呀

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

1回答

提问者 诺巴蒂 2019-11-24 22:35:33

好像知道了,这个组件函数一直都在被调用,如果useCallback 函数不更新,闭包找的是定义时候作用域里的值,不是最新的

0 回复 有任何疑惑可以回复我~
  • 提问者 诺巴蒂 #1
    所以就算使用 setName,其实随便传入个其他的依赖,只要能让他重新生成 useCallback 里的函数赋值给 handleClick,都可以正常使用;这算不算个设计缺陷呀,正常理解我是不应该传这个依赖来触发更新的,底层自动处理更合理一些
    回复 有任何疑惑可以回复我~ 2019-11-24 22:38:58
  • 对的 如果依赖项不变化,那么该函数内部的依赖数据就是旧的,那么得到的结果还是之前的,也就是如果count不做为依赖,那么就算count在外部已经变化了,但是根据count计算的useMemo/useCallback结果一直是旧的
    回复 有任何疑惑可以回复我~ 2020-06-01 13:08:29
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信