首页 > 解决方案 > 用嵌套的变量反应集合状态

问题描述

我有一个看起来像的输入

<input name="data.company.name" value="Bob's Burgers" />

在它的 onChange 上,我想用它的名字更新状态。

<input name="data.company.name" value="Bob's Burgers" onChange={(e) => this.setState({ [e.name]: e.target.value}) />

但是当我这样做时,状态看起来像

this.state = {
   data: { company: { name: '' } },
   data.company.name: "Bob's Burgers"
}

我怎样才能实现将名称传递给状态,所以我最终得到

this.state = {
   data: { company: { name: "Bob's Burgers" } }
}

我无法更改输入的名称,因为它是通过字段组件设置的。

标签: reactjsstatesetstate

解决方案


如果您不介意将 lodash 添加到您的项目中,您可以这样

<input
  name="data.company.name"
  value="Bob's Burgers"
  onChange={e =>
    e.persist();
    this.setState(prevState => {
      return _.setWith(_.clone(prevState), e.name, e.target.value, _.clone);
    });
  }
/>;


推荐阅读