为什么这里的handleAdd要用高阶写法,useCallback不行呢?

来源:15-13 简易购物车的Hook版本

慕姐8511489

2023-03-01

试了试,handleRemove、handleAdd、handleCartBtn用useCallback不行。
useCallback不是也有记忆功能吗?

写回答

1回答

西门老舅

2023-03-01

你好,需要这样做才行

const handleAdd = useCallback((id) => {

        return () => {

          let cloneList = _.cloneDeep(list)

          let now = cloneList.find((v)=> v.id === id)

          now.number++

          setList(cloneList)

        }

      }, [list])

      const handleRemove = useCallback((id) => {

        return () => {

          let cloneList = _.cloneDeep(list)

          let now = cloneList.find((v)=> v.id === id)

          if( now.number > 1 ){

            now.number--

          }

          setList(cloneList)

        }

      }, [list])

因为 一开始 list是空数组,如果用useCallback包起来,而第二个参数是空数组的话,那么list只能为空的时候执行一次,后续list更新后,也不会重新创建函数了,那么list在函数内就一直是空函数了。

1
9
LydiaSo
回复
西门老舅
已解決,jason文件應該放入public/static、所以引入文件路徑也應該是'static/data.json'。可以成功渲染,也能實現性能優化。
2024-04-18
共9条回复

Vue3 + React18 + TS4入门到实战 系统学习3大热门技术

专为初级前端人员设计,系统性学习三大技术

261 学习 · 182 问题

查看课程