react使用useState更新数组失败

失败案例:

javascript 复制代码
  const [addBox, setAddBox] = useState([])
  const itemAdd = (item) =>{
    addBox.push(item);
    setAddBox(addBox)
    console.log(addBox,'点击添加按钮')
  }

原因: react的useState hook ****监听的是浅监听

在 React 中,使用 useState Hook 来更新数组时,直接对数组进行操作(例如使用 push() 方法)是无法触发组件重新渲染的。这是因为 React 使用浅比较(shallow comparison)来比较前后状态值的引用,如果引用相同,React 会认为状态没有发生变化,从而不会重新渲染组件。

而在使用解构赋值时,我们会创建一个新的数组实例,并将其赋值给一个新的变量。由于每次渲染都会创建新的数组实例,React 可以正确地检测到数组的变化,并触发组件的重新渲染。

解决方法:解构

javascript 复制代码
setAddBox([...addBox])

成功案例:

javascript 复制代码
  const [addBox, setAddBox] = useState([])
  const itemAdd = (item) =>{
    let nowBox = [...addBox,item];
    setAddBox(nowBox)
    console.log(nowBox,'点击添加按钮')
  }

解构参考地址:ES6 入门教程

相关推荐
JieE2125 小时前
LeetCode 56. 合并区间|超清晰 JS 图解思路,面试高频区间题
javascript·算法·面试
runnerdancer6 小时前
LLM是怎么处理messages数组的,提示词缓存又是什么
前端·agent
陈随易7 小时前
VSCode的Copilot扩展支持接入DeepSeek,Kimi了!
前端·后端·程序员
我不是外星人8 小时前
有了 Harness Engineering ,真的还需要研发工程师吗?
前端·后端·ai编程
candyTong8 小时前
RTK 技术原理:一次典型会话里,80% 上下文是怎么省下来的
javascript·后端·架构
IT_陈寒11 小时前
JavaScript的闭包把我坑惨了,说好的内存会自动回收呢?
前端·人工智能·后端
Jackson__12 小时前
分享一个横向滚动案例,带悬停暂停,通用性很强
前端
MariaH12 小时前
git rebase的使用
前端
_柳青杨12 小时前
深入理解 JavaScript 事件循环
前端·javascript
阡陌Jony12 小时前
关于前端性能优化的一些问题:
前端