代码之家  ›  专栏  ›  技术社区  ›  T. Evans

将状态项设置回初始状态而不发生变异

  •  1
  • T. Evans  · 技术社区  · 6 年前

    我有一个表单在反应,我正在更新一个表单。这个表单已经有了初始值,我想在输入为空时将状态中的表单项更新回其初始值 ''

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

    handleInputChange = (name, {value}) => {
    
        if(value === '') {
          this.setInitialState(name);
        }
    
        let val = {...this.state, [name] : value}
    
        this.setState(val);
      }
    

    setInitialState 函数可以采用正在更新的输入字段的名称。问题是,如何在不将整个state对象更新回initial的情况下,将state中的一个项设置回其初始值,并且尝试以不变的方式执行此操作。

    这个函数是:

     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 回复  |  直到 6 年前
        1
  •  2
  •   Tomasz Bubała    6 年前

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

    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
    
        2
  •  1
  •   tomahaug    6 年前

    name 接收时间 handleInputValue 对应于 member.*

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