将状态项设置回初始状态而无突变

时间:2018-08-13 20:39:56

标签: javascript reactjs

我在React中有一个要更新的表单。此表单已经具有初始值,当输入为空''时,我想将状态下的表单项更新回其初始值。

当用户这样输入或更新字段时,我将不变地更新状态对象:

handleInputChange = (name, {value}) => {

    if(value === '') {
      this.setInitialState(name);
    }

    let val = {...this.state, [name] : value}

    this.setState(val);
  }

setInitialState函数可以采用正在更新的输入字段的名称。问题是如何将状态中的一个项目仅设置回其初始值,而又不将整个状态对象更新回初始状态,而我却试图一成不变地做到这一点。

以下是该功能:

 setInitialState = (val) => {
    let active = this.props.member.active;
    let age = this.props.member.age;
    let firstname = this.props.member.firstname;
    let lastname = this.props.member.lastname;
    let gender = this.props.member.gender;
    let id = this.props.member.id;
    let patientId = this.props.member.patientId;



  }

我尝试执行以下操作:

  1. this.props.member.${val}
  2. this.props.member.val

我一直在寻找其他问题和将整个状态对象更新回初始状态的地方,但这不是我想要做的。

如果您有地方可以看到如何做的话,我也愿意考虑一下。

谢谢

2 个答案:

答案 0 :(得分:2)

这是使用字符串访问对象属性的方式:

this.props.member[val]

基于您尝试过的一般示例:

var obj = { foo: "bar" };
console.log(obj.foo); // "bar". This is dot notation.
console.log(obj["foo"]); // "bar". This is what you need here - bracket notation
console.log(obj."foo"); // Syntax error
console.log(obj.${"foo"}); // Syntax error

答案 1 :(得分:1)

如果name中收到的属性handleInputValuemember.*对象键的属性键相对应,则可以按照以下步骤进行操作:

handleInputChange(name, { value }) {
  if (value === '') {
    this.setState({
      [name]: this.props.member[name]
    })
  } else {
    this.setState({
      [name]: value
    })
  }
}