提问人:Chandrika 提问时间:9/15/2021 最后编辑:Chandrika 更新时间:9/15/2021 访问量:374
如何在给定我们必须传递与道具相同的对象的情况下不可变地更新对象?
How to immutable update an object given that we have to pass the same object as props?
问:
我有一个对象,可以在单击按钮时更新。答:我将该对象作为道具传递给另一个组件。我现在正在做的是在按钮单击事件上以可变方式更新对象。amounts
onClick = e => {
amounts.map(
amount => (amount.tax = taxes ? 500 : 0)
);
}
<Display amounts={amounts} />
如何以不可变的方式更新金额?
答:
1赞
Chris
9/15/2021
#1
正如评论中提到的,有几件事正在发生:
- 您没有更新 Array 引用,因此 React 不会基于此突变重新渲染。
amounts
- 您正在用于更新单个属性。这将更新金额集合中的对象引用。
Array#map
- 没有或类似的东西可以更新父组件中的属性值。
setAmounts
amount
假设您在 s 父组件中使用,则必须使用 props 将函数传递给组件。useState
<Display />
setAmounts
<Display />
<Display amounts={amounts} setAmounts={setAmounts} />
onClick = e => {
setAmounts(
amounts.map(
amount => ({ ...amount, tax: taxes ? 500 : 0 })
);
);
}
评论
option
amount
amounts.map
创建不以任何方式使用的新数组。您实际上需要分配它才能产生效果。developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/......xyz = amounts.map(.....)
amounts = xyz
onClick
<Display />