[英]How to update array element using setState in React?
如果我有一个类似于这样的数组结构:
person[{id: 0, firstname: 'john', surname: 'smith'},
{id: 1, firstname: 'jane', surname: 'smith'}]
然后使用事件处理程序来捕获一些更改并使用 setState,我如何更新与此类似的数组元素:
handleChangeEvent(newSurname, id){
this.setState({ person[id].surname : newSurname})
}
使用setState()
的更新程序回调在单个原子操作中执行状态更改,而不会在同一事件滴答中覆盖(或被覆盖)组件的其他状态更改:
handleChangeEvent(surname, id) {
this.setState(({ people }) => ({
people: people.map(
person => person.id === id ? { ...person, surname } : person
)
}));
}
也许您可以尝试以下方法:
handleChangeEvent(newSurname, id){
this.setState(prevState => ({
people: prevState.people.map(
person => person.id === id ? { ...person, surname: newSurname } : person
)
}));
}
在此代码片段中,我们将获得对组件状态下的people
数组的引用。 然后我们根据ids
过滤这个数组,如果id
匹配需要更新姓名的人,我们会适当地设置surname
。 否则,如果id
与需要更新的人不匹配,我们只返回现有对象。
希望这有帮助!
这基本上就是你要找的。 但是,我建议您使用像 immer 这样的库来创建不可变对象。
handleChangeEvent(newSurname, id){
this.setState({
people : Array.from(this.state.people, person => {
if(person[id] === id)
return {...person, surname: newSurname}
return person
})
})
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.