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

相关推荐
Jul1en_3 分钟前
Claude 迁移 Codex 工作流迁移与更新
java·服务器·前端·后端·ai编程
Heo5 分钟前
14_React 中的更新队列 updateQueue
前端·javascript·面试
前端 贾公子12 分钟前
解决浏览器端 globalThis is not defined 报错
前端·javascript·vue.js
宁雨桥14 分钟前
前端与AI结合实战分享
前端·人工智能
之歆33 分钟前
DAY12_CSS3选择器全攻略 + 盒子新特性完全指南(下)
前端·javascript·css3
kyriewen1135 分钟前
代码写成一锅粥?3个设计模式让你的项目“起死回生”
开发语言·前端·javascript·设计模式·ecmascript
郑生zs36 分钟前
Hooks-useEffect
react.js
光影少年41 分钟前
react函数组件、类组件、纯组件、受控/非受控组件
前端·react.js·掘金·金石计划
程序员包打听41 分钟前
MoonBit 是什么?给第一次听说这门语言的你
前端·后端
Rkgua1 小时前
CSS动画效果
前端·css