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

如何对需要作为props传递的对象进行不可变更新?

不可变更新方案

你原有写法的核心问题是直接修改了原有amount对象的属性,且没有更新状态的引用,既属于可变操作污染原数据,也会导致子组件无法触发重渲染。

正确的实现方式是通过map返回新数组,同时为每个元素生成新的对象副本,仅在新对象上修改属性,最后用新数组替换原有的状态:

函数组件写法

onClick = e => {
  const newAmounts = amounts.map(amount => ({
    ...amount,
    tax: taxes ? 500 : 0
  }));
  setAmounts(newAmounts);
}

<Display amounts={amounts} />

类组件写法

onClick = e => {
  const newAmounts = this.state.amounts.map(amount => ({
    ...amount,
    tax: taxes ? 500 : 0
  }));
  this.setState({ amounts: newAmounts });
}

<Display amounts={this.state.amounts} />

注意事项

如果amount对象存在深层嵌套的属性,需要对嵌套层级做对应深拷贝处理,避免修改原对象的嵌套属性。上述方案针对一级属性的场景已经完全符合不可变要求,不会修改原数据,同时React可以通过引用变化正确触发组件重渲染。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 17:27:01