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 入门教程

相关推荐
溪语流沙5 小时前
【每天一个CSS | Day18】会摆动的拟物怀表:黄铜、皮革与催眠摆
前端·css3·html5
OpsEye5 小时前
大模型会话里的手机号、身份证,怎么自动脱敏?
javascript·ai编程
Lvan的前端笔记5 小时前
docker:基于docker的前端部署方案
前端·docker·状态模式
程序人生8885 小时前
从“把隐私文件上传到别人云端“到本地可控:DocConverter Web 立项初心与架构选型
前端·图像处理·人工智能·opencv·架构·ocr·文心一言
开开心心就好5 小时前
视频里的图片怎么提取?双击一下就导出
java·前端·人工智能·spring·智能手机·intellij-idea·excel
爱喝水的小周5 小时前
实验十 Vue‑Router 王者荣耀战绩查询 APP 开发实践
前端·javascript·vue.js
yexianglunbai5 小时前
Vue 3 全面详解:从核心特性到工程化实践
前端·javascript·vue.js
传人once5 小时前
选择文件按钮样式如何美化
前端·html·css3·jquery·html5
parade岁月5 小时前
告别 Deno 时代?运行时进入一年倒计时,Deno 团队并入 Cloudflare
前端
Lucky_Turtle5 小时前
【HTML】前端页面禁止缩放
前端·html