reactjs如何更新状态

时间:2016-04-10 08:13:00

标签: javascript reactjs

constructor(){
    super();
    this.state = { 
        address: {
            street:null,
            city:null,
            postalCode: null
        }
    };
}
postalCodeChange(e){
    this.setState.address.postalCode = e.target.value;
    console.log(this.state);
}

我试图更新状态,但仅限邮政编码。当上面的代码执行时,我希望得到类似的东西

Object {address: Object {
           street: null,
           city: null,
           postalCode: 'some new value'
} }

但是我收到了错误。怎么了?

2 个答案:

答案 0 :(得分:5)

要更新状态,您必须使用setState方法

const state = merge({}, this.state, {
  address: { postalCode: e.target.value }
});

this.setState(state);

注意 - merge它不是真正的功能,为了深度合并对象,您可以使用merge-deepassign-deep等包EM>

或者您可以使用update中的React.addons方法,让此方法执行以下步骤

  1. npm i react-addons-update --save
  2. import(或require)并使用

    import update from 'react-addons-update';
    const state = update(this.state, {
      address: { 
        postalCode: { $set: e.target.value }
      }
    });     
    
    this.setState(state);
    
  3. Example

    如果您使用ES2015,也可以使用Object.assignspread operator

    <强> Object.assign

    const state = Object.assign({}, this.state, {
       address: Object.assign({}, this.state.address, { postalCode: 1000 })
    });
    

    <强> spread operator

    const newState = {
      address: { ...state.address, postalCode: 1000 }
    };
    

答案 1 :(得分:2)

我看到你使用的是ES6,所以我假设你也可以使用stage-2 object spread operator

通过使用该功能,您无需额外的插件或大量代码即可更新您的状态。

this.setState({
    address: {
        ...this.state.address,
        postalCode: e.target.value
    }
});