如何在State中更改嵌套对象的属性?

时间:2019-08-06 12:59:33

标签: javascript reactjs object ecmascript-6

状态看起来像这样

{
  ownRecipe: {name:""}
}

现在我需要更改名称属性,这不起作用

this.setState({ownRecipe[name]:"Pineapple pizza"});

这可行,但是也许有更好的方法吗?

let ownRecipeCopy = {}
for(let key in this.state.ownRecipe){
  ownRecipeCopy[key] = this.state.ownRecipe[key];
}
ownRecipeCopy.name = e.target.value;
this.setState({ownRecipe: ownRecipeCopy});

编辑:谢谢大家的回答

2 个答案:

答案 0 :(得分:9)

展开原始对象并更改所需的属性:

this.setState(prevState =>({
    ownRecipe : {
        ...prevState.ownRecipe,
        name : 'new name'
    }
}));

答案 1 :(得分:3)

像这样访问属性:

this.setState(prevState => ({ ...prevState, ownRecipe: { ...prevState.ownRecipe, name: "Pineapple pizza" }});

传播将保存对象的先前内容,因此您不会丢失任何其他信息。您也可以这样:

this.setState({ ...this.state, ownRecipe: { ...this.state.ownRecipe, name: "Pineapple pizza" }});

但是,如果您有很多属性,这将变得很乏味。