如何使用setState更新单个事件的值?也很高兴在React之外看到它是如何完成的。
state = {events: [{
event1:{
name: 'Name 1',
id: 1,
},
},{
event2:{
name: 'Name 2',
id: 2,
},
},{
event3:{
name: 'Name 3',
id: 3,
},
}]}
答案 0 :(得分:1)
您可以使用Array.map
方法进行操作:
renameEvent(idToRename, newName) {
this.setState(prevState => ({
events: prevState.events.map(event => {
if (event.id === idToRename) {
return {...event, name: newName};
} else {
return event;
}
});
}));
}
答案 1 :(得分:1)
对于当前结构,只有Array.map可以提供帮助。但我可以看到里面的id
字段。那么如何将结构更改为具有对象呢?
{
1: {
event1:{
name: 'Name 1',
id: 1,
},
},
2: {
event2:{
name: 'Name 2',
id: 2,
},
},
那么您将获得传播算子的力量:
this.setState(prevState => ({
...prevState.events,
[idToReplace]: {
...prevState.events[idToReplace],
name: 'new name',
},
}));
我也想知道在单个元素中进行如此深层的嵌套是否有意义。也许最好在子组件中处理特定name
的{{1}}。
答案 2 :(得分:1)
正如@Oleksandr Kovpashko所述,您可以使用su
,因为它会创建一个新数组。
您还可以使用.map
克隆数组,然后对其进行突变。请注意,它仅克隆数组,而不克隆项目。您不应该对项目进行突变:
.slice()