使用动态密钥对setState做出反应

Str*_*vaz 8 reactjs

我有以下代码片段:

onChange(e) {
    e.persist
    this.setState((prevState) => {
      prevState[e.target.id] =  e.target.value
      return prevState
    })
  }
Run Code Online (Sandbox Code Playgroud)

我将如何使用上面的代码设置每个键的状态.

这是初始状态:

 this.state = {
      heading: this.props.match.params.length > 1 ? "Edit Post" : "Create Post",
      title: '',
      category: '',
      body: '',
      author: ''
    }
Run Code Online (Sandbox Code Playgroud)

May*_*kla 17

基本规则是:

我们可以使用Computed属性名称概念并使用任何js表达式动态计算对象属性名称.为此,我们需要将表达式放在里面[].

像这样:

var obj = {
   [10 * 20 + 1 - 5]: "Hello"
};

console.log('obj = ', obj);
Run Code Online (Sandbox Code Playgroud)

解:

根据您发布的代码,您需要放入e.target.id内部[],如下所示:

onChange(e) {
    this.setState({
      [e.target.id]: e.target.value
    })
}
Run Code Online (Sandbox Code Playgroud)

或者我们可以先创建该对象,然后将该对象传递给setState函数,如下所示:

onChange(e) {
    let obj = {};
    obj[e.target.id] = e.target.value
    this.setState(obj);
}
Run Code Online (Sandbox Code Playgroud)

你也不需要prevState.您可以使用新值直接更新状态变量.prevState仅当新状态值依赖于先前的状态值时才需要,例如在计数器的情况下.

  • 这意味着你忘了绑定`onChange`方法,把这一行放在构造函数中:`this.onChange = this.onChange.bind(this)`:) (2认同)