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

相关推荐
_AaronWong20 小时前
实现 Electron 资源下载与更新:实时进度监控
前端·electron
Doris_202320 小时前
Python条件判断语句 if、elif 、else
前端·后端·python
Doris_202320 小时前
Python 模式匹配match case
前端·后端·python
森林的尽头是阳光20 小时前
vue防抖节流,全局定义,使用
前端·javascript·vue.js
YiHanXii21 小时前
React.memo 小练习题 + 参考答案
前端·javascript·react.js
zero13_小葵司21 小时前
Vue 3 前端工程化规范
前端·javascript·vue.js
Yolanda_202221 小时前
vue-sync修饰符解析以及切换iframe页面进行保存提示功能的思路
前端·javascript·vue.js
Pu_Nine_921 小时前
深入理解节流(Throttle):原理、实现与应用场景
javascript·性能优化·es6·节流·lodash 库
伍哥的传说21 小时前
Vite Plugin PWA – 零配置构建现代渐进式Web应用
开发语言·前端·javascript·web app·pwa·service worker·workbox
ai产品老杨21 小时前
解锁仓储智能调度、运输路径优化、数据实时追踪,全功能降本提效的智慧物流开源了
javascript·人工智能·开源·音视频·能源