我需要更新状态中的对象,但只更新其中的一些元素。因此,如果它有7个元素,并且我的新对象有4个,那么这4个应该替换现有的,而其余的应该保留。
这是一个示例组件,它输出当前对象键和状态值。按下按钮时,对象应在其某些属性上使用新值进行更新。现在它用4个元素覆盖对象,所以我需要修改它。请参阅handleClick方法。
在我的真实项目中,对象处于redux状态,但我想解决方案将是相同的。我从发布的表单中获取新属性,因此我有一个类似下面名为“update”的对象。
import React, { Component } from 'react';
import Button from 'material-ui-next/Button';
import Menu, { MenuItem } from 'material-ui-next/Menu';
class UpdateObject extends Component {
constructor(props) {
super(props)
this.state = {
theObject : {
token: '478478478478',
firstName: 'Goofy',
lastName: 'Hello',
age: '14',
sex: 'female',
employed: true,
favoriteColor: 'Blue',
bio: 'details of bio',
}
};
this.handleClick = this.handleClick.bind(this);
}
handleClick(){
let update = {
age: '40',
lastName: 'Newname',
employed: true,
favoriteColor: 'Yellow',
}
let change = Object.assign({}, this.state.theObject);
change = update;
this.setState({ theObject: change });
}
render() {
const myObj = this.state.theObject;
return (
<div className="updateobjectwrapper bl">
<div> Here is the current object: <br />
<ul>
{ Object.entries(myObj).map(([ key,value ] ) => {
return (
<li key={key}>{key} : {value} </li>
)
})
}
</ul>
</div>
<Button
onClick={this.handleClick}
>
Update Object
</Button>
</div>
)
}
}
答案 0 :(得分:4)
您可以将多个参数传递给Object.assign
方法,它将合并所有参数。
handleClick(){
let update = {
age: '40',
lastName: 'Newname',
employed: true,
favoriteColor: 'Yellow',
}
let change = Object.assign({}, this.state.theObject, update);
this.setState({ theObject: change });
}