You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ReactJS中向数组添加元素?push()与concat()用法困惑

解决方法:正确实现 addItem 方法

在React中,绝对不能直接修改state中的数组(比如用push()),因为push()会改变原数组的引用,而React依赖state的引用变化来触发组件重新渲染。我们需要创建一个新数组来更新state,这里推荐两种常用方式:

方式1:使用ES6扩展运算符(最简洁)

直接在父组件的addItem方法里这样写:

addItem() {
  this.setState(prevState => ({
    items: [...prevState.items, { name: 'New Name', num: 'New Num' }]
  }));
}

这里用了函数式更新的方式(传入一个函数给setState),因为我们需要基于之前的state来计算新state,这样能确保拿到最新的state值,避免异步更新带来的问题。扩展运算符[...prevState.items]会复制原数组的所有元素,然后在末尾添加新的项,返回一个全新的数组。

方式2:使用concat()方法

concat()方法会返回一个新数组,不会修改原数组,也能实现需求:

addItem() {
  this.setState(prevState => ({
    items: prevState.items.concat({ name: 'New Name', num: 'New Num' })
  }));
}

为什么不能用push()?

push()是原地修改原数组,不会创建新的数组引用。React在对比state变化时,发现数组的引用没有改变,就会认为state没有更新,因此不会触发组件的重新渲染,你的新增项自然不会显示出来。

替换掉你原有的addItem()方法后,点击"ADD ITEM"按钮就能看到期望的新增项了。

内容的提问来源于stack exchange,提问作者DaOneRom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:18:29