使用 setState 更新 state.item[1]
在这种情况下,您正在尝试更新对象内的对象使用 setState 在您的状态中。要正确更新状态,您需要复制整个状态对象,修改副本,然后将状态设置为更新后的副本。
以下是如何更新 state.item[1] 使用setState:
// 1. Make a shallow copy of the items
let items = [...this.state.items];
// 2. Make a shallow copy of the item you want to mutate
let item = {...items[1]};
// 3. Replace the property you're interested in
item.name = 'newName';
// 4. Put it back into our array. N.B. we *are* mutating the array here,
// but that's why we made a copy first
items[1] = item;
// 5. Set the state to our new copy
this.setState({items});
如果需要,您可以合并步骤 2 和 3:
let item = {
...items[1],
name: 'newName'
}
或者你可以在一行中完成整个事情:
this.setState(({items}) => ({
items: [
...items.slice(0,1),
{
...items[1],
name: 'newName',
},
...items.slice(2)
]
}));
注意:在这些示例中,我们假设 items 是一个数组。如果 items 是一个对象,您将对对象属性进行类似的更新。
请记住,在使用 setState 时,您应该始终在修改之前复制之前的状态,以确保不会意外发生变化原始状态对象。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3