【问题标题】:React set state with variable that is nested用嵌套的变量反应集合状态
【发布时间】:2021-01-26 23:49:56
【问题描述】:

我的输入看起来像

<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" } }
}

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

【问题讨论】:

    标签: reactjs state setstate


    【解决方案1】:

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

    <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);
        });
      }
    />;
    
    

    【讨论】:

    • e 在 setState 中返回未定义?
    • @Ryan 我认为需要persist(),我更新了答案
    • 是的,确实如此。我刚刚在您提交答案时添加了它。谢谢!
    • 另外,与 lodash 的通话很好。我总是忘记我可以用它做很多事情
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-13
    • 2018-08-02
    • 1970-01-01
    • 2018-09-29
    • 2022-06-13
    • 1970-01-01
    • 2021-09-16
    相关资源
    最近更新 更多