为什么这里的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在函数内就一直是空函数了。
192024-04-18
相似问题