【问题标题】:ReactJS How to change value of object stored in stateReactJS如何更改存储在状态中的对象的值
【发布时间】:2017-09-28 13:19:30
【问题描述】:

所有代码都将在我的问题和解释下方。

所以我要做的是更新我在祖父母类中的状态,这是出于与文件有关的原因,我也在使用 Material-UI 作为文本框。 而且我也在写没有 Redux 的 Redux,因为如果你看到一些奇怪的东西我可以。

我的祖父母班级状态如下:

state = {
  value: 0,
  application: {
    ApplicationPK: '',
    Person: [
      {
        PersonPK: '',
        FullName: '',
        TitleFK: '',
        Forename: '',
        MiddleNames: '',
        Surname: '',
        DateOfBirth: '',
        HomeTelephone: '',
        MobileTelephone: '',
        EmailAddress: '',
        LoanPurposeFK: '',
        MaritalStatusFK: '',
        Addresses: [
          {
            FlatNumber: '',
            BuildingName: '',
            BuildingNumber: '',
            Street: '',
            District: '',
            Town: '',
            County: '',
            Postcode: '',
            ResidentialStatusFK: '',
            DateMovedIn: '',
            IsCurrentAddress: '',
            AddressPK: '',
          },
        ],
        Employment: [
          {
            EmploymentStatusFK: '',
            Employer: '',
            JobTitle: '',
            Telephone: '',
            MonthlyPay: '',
            IsPaidByBACS: '',
            PayFrequencyFK: '',
            DayOfMonth: '',
            DayOfWeek: '',
            NextPayDate: '',
            FollowingPayDate: '',
            DateStarted: '',
            Postcode: '',
            EmploymentPK: '',
            Website: '',
          },
        ],
        BankAccount: [
          {
            Name: '',
            Sortcode: '',
            AccountNumber: '',
            IsAccountHolder: '',
            IsJointHolder: '',
            IsSoleAuthoriseDebits: '',
            IsPrimary: '',
            IsActive: '',
            BankAccountPK: '',
          },
        ],
      },
    ],
  },
};

我知道它很长,但那是因为 mui 文本框在加载时不喜欢空值而出错。

这就是我现在如何改变状态,但是它把它作为一个值添加到状态的顶层,我希望它明显地替换人内部的值。这个函数显然和状态属于同一类

 handleChangeType = event => {
   this.setState({ [event.target.name]: event.target.value });
 }

最后,Mui 文本框看起来像这样:

<Input
   defaultValue={this.props.state.application.Person[0].Forename}
   className={classes.input}
   onChange={this.props.handleChangeType}
   name="Forename"
   inputProps={{
     'aria-label': 'Description',
   }}
/>

TL:DR:我如何更新状态中的正确值

【问题讨论】:

    标签: javascript html reactjs material-ui


    【解决方案1】:

    我知道它很长,但那是因为 mui 文本框在加载时不喜欢空值而出错。

    为了避免到处初始化一堆空字符串,你可以这样做:

    defaultValue={((this.props.state.application || {}).Person[0] || {}).Forename || ""}
    

    根据更新正确的状态变量,我将为每个类别使用不同的处理程序。您还必须记住,您的状态变量是Person 数组。如果要更新其中的任何内容,则需要将新数组传递给状态。最后,您似乎希望能够在您的 Persons 数组中拥有多个用户,但是您的事件处理程序没有得到任何关于您要更新字段 X 或 Y 的用户的任何信息。

    例如:

    handleChangeType = (userIndex, name, event) => {
      let person = Object.assign({}, this.state.Persons[userIndex]);  //shallow-copy
      person[name] = event.target.value
      this.setState({Person: person });
    }
    

    对于嵌套的每个对象或数组,您需要创建一个副本,更改副本,然后将原始副本替换为副本。

    【讨论】:

    • 谢谢你的帮助,但是我如何在状态中设置对象的一个​​值,因为我一直覆盖整个状态或它位于状态的顶层,所以它不会在框中更新.
    • 所以对于每个不同的对象我都需要一个 handlechangepersons 等等
    • @andrewwilson,你可以,是的。这里的问题在于数据的结构。它使正确更新状态有点痛苦。如果可能,考虑简化结构。
    • 所以你会说删除应用程序括号,只让人员处于与应用程序所在州相同的级别
    • 是否可以像我正在做的那样通过另一个类将变量传递给函数,或者不建议这样做。抱歉,我在这里写的是一个相当复杂的系统。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-25
    • 2021-05-09
    相关资源
    最近更新 更多