代码之家  ›  专栏  ›  技术社区  ›  Strahinja Ajvaz

使用动态键反应设置状态

  •  14
  • Strahinja Ajvaz  · 技术社区  · 8 年前

    我有以下代码片段:

    onChange(e) {
        e.persist
        this.setState((prevState) => {
          prevState[e.target.id] =  e.target.value
          return prevState
        })
      }
    

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

    这是初始状态:

     this.state = {
          heading: this.props.match.params.length > 1 ? "Edit Post" : "Create Post",
          title: '',
          category: '',
          body: '',
          author: ''
        }
    
    1 回复  |  直到 8 年前
        1
  •  25
  •   Mayank Shukla    8 年前

    基本原则是:

    Computed property names 概念和使用任意 js表达式 动态计算对象特性名称。为此,我们需要将表达式放入 [] .

    这样地:

    var obj = {
       [10 * 20 + 1 - 5]: "Hello"
    };
    
    console.log('obj = ', obj);

    解决方案:

    根据您发布的代码,您需要将 e.target.id 在…内 []

    onChange(e) {
        this.setState({
          [e.target.id]: e.target.value
        })
    }
    

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

    onChange(e) {
        let obj = {};
        obj[e.target.id] = e.target.value
        this.setState(obj);
    }
    

    你也不需要 prevState . 可以直接用新值更新状态变量。 prevState公司