React - 更新状态中的对象

时间:2018-03-29 19:41:03

标签: reactjs ecmascript-6 redux

我需要更新状态中的对象,但只更新其中的一些元素。因此,如果它有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>
    ) 

 }


}

1 个答案:

答案 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 });
}