react使用useState更新数组失败

失败案例:

  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 可以正确地检测到数组的变化,并触发组件的重新渲染。

解决方法:解构

setAddBox([...addBox])

成功案例:

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

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

相关推荐

  1. react使用useState更新数组失败

    2023-12-29 03:22:02       42 阅读
  2. React -- useState使用方法

    2023-12-29 03:22:02       26 阅读
  3. reactuseState 使用指南

    2023-12-29 03:22:02       8 阅读
  4. React Hooks的useState、useRef使用

    2023-12-29 03:22:02       41 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-29 03:22:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-29 03:22:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-29 03:22:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-29 03:22:02       20 阅读

热门阅读

  1. 【华为OD】人工智能面试题目

    2023-12-29 03:22:02       39 阅读
  2. 端口号与 IP 地址之间有什么关系?

    2023-12-29 03:22:02       32 阅读
  3. C++ 383. 赎金信 (a b字符串计数比较)

    2023-12-29 03:22:02       34 阅读
  4. Ubuntu系统更换清华大学镜像源

    2023-12-29 03:22:02       42 阅读
  5. leetcode-2.两数相加

    2023-12-29 03:22:02       38 阅读
  6. 3.01【python正则表达式以及re模块】

    2023-12-29 03:22:02       40 阅读
  7. Mysql5.7版本实现窗口函数

    2023-12-29 03:22:02       32 阅读
  8. 基于SpringBoot的考编论坛网站

    2023-12-29 03:22:02       43 阅读
  9. python mysql登录注册

    2023-12-29 03:22:02       38 阅读
  10. C++如何获取随机浮点数

    2023-12-29 03:22:02       37 阅读