Javascript 如何更改处于状态的嵌套对象的属性?

Javascript 如何更改处于状态的嵌套对象的属性?,javascript,reactjs,object,ecmascript-6,Javascript,Reactjs,Object,Ecmascript 6,例如,这个州看起来是这样的 { ownRecipe: {name:""} } 现在我需要更改name属性,这不起作用 this.setState({ownRecipe[name]:"Pineapple pizza"}); 这是可行的,但也许有更好的方法 let ownRecipeCopy = {} for(let key in this.state.ownRecipe){ ownRecipeCopy[key] = this.state.ownRecipe[key]; } ownRec

例如,这个州看起来是这样的

{
  ownRecipe: {name:""}
}
现在我需要更改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});

编辑:感谢大家的回答

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

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

按如下方式访问属性:

this.setState(prevState => ({ ...prevState, ownRecipe: { ...prevState.ownRecipe, name: "Pineapple pizza" }});
展开会保存对象以前的内容,因此不会丢失任何其他信息。您也可以这样做:

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

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

由于setState的异步性质,不建议使用
this.state
获取
setState
中的上一个状态。相反,在使用以前的状态值更新状态时,始终依赖于传递回调
this.setState(prevState=>({owncipe:…}))
。updater函数收到的prevState保证是最新的。更新程序的输出与prevState浅层合并。看到和真实。固定的!谢谢你,只需将
…prevState.ownRecipe
改为,否则它会将整个状态的副本放入ownRecipe对象中。第一个
…prevState
是不必要的,react将为你合并对象,
this.setState(prevState=>({ownRecipe:{…prevState.ownRecipe,名称:“菠萝比萨饼”);