【问题标题】:React - handle state of value nested in initial objectReact - 处理嵌套在初始对象中的值状态
【发布时间】:2017-04-14 13:38:06
【问题描述】:

我只是想处理嵌套在初始对象中的任务的输入状态。我想将任务值设置为状态 dataGoal 对象中的名称。

初始状态如下:

渲染方法:

render(){
    return(
      <div>
        <main className="content">
          <form onSubmit={this.onSubmit}>

            <div>
              {Object.keys(this.state.dataGoal).map( (key, index) => {
                  return <div key={key}>
                            <label>{this.state.dataGoal[key].name}</label>
                            <p>Index: {index}</p>

                            <div className="input-wrap">

                              {Object.keys(this.state.dataGoal[key].tasks).map( (taskKey) => {
                                  return <div key={`task-wrap-${taskKey}`}>

                                           <p>{taskKey}</p>

                                            <input
                                              type="text"
                                              name="name"
                                              value={this.state.dataGoal[key].tasks[taskKey].name}
                                              onChange={(e) => this.handleInputChange(e, key, taskKey)} />

                                        </div>


                              })}

                            </div>
                            <a className="add-link" onClick={(e) => this.appendInput(e, key)}>
                              {"+ ADD ANOTHER TASK"}
                            </a>
                         </div>;
              })}
            </div>

            <div className="input-wrap">
               <input
                 className="primary-btn"
                 type="submit"
                 value="Set my goal!"
                 onClick={this.formReset} />
             </div>
           </form>
        </main>
      </div>
    );
  }

和handleInputChange函数:

  handleInputChange = (e, key, taskKey) => {
    console.log(this.state.dataGoal[key].tasks);
    const value = e.target.value;
    const name = e.target.name;
    const dataGoal = this.state.dataGoal[key].tasks;
    const updatedTask = Object.assign({}, dataGoal[taskKey], { [name]: value });

    this.setState({
      dataGoal: Object.assign({}, dataGoal, { [taskKey]: updatedTask })
    });
  }

一切看起来应该可以正常工作,但我只是收到一个错误,它在 handleInputChange 中“无法读取未定义的属性'任务'”。但是,如果我 console.log 任务它会给我想要的输出:

有人知道吗?

谢谢你, 雅库布

【问题讨论】:

  • 感谢您的提示。初始 state.dataGoal 设置为空对象。

标签: javascript reactjs object state


【解决方案1】:

通过像这样破坏状态解决了这个问题:

handleInputChange = (e, key, taskKey) => {
    const value = e.target.value;
    const name = e.target.name;

    this.setState({
      dataGoal: {
          ...this.state.dataGoal,
          [key]: {
             ...this.state.dataGoal[key],
             tasks : {
               ...this.state.dataGoal[key].tasks,
               [taskKey] : {
                 ...this.state.dataGoal[key].tasks[taskKey],
                 [name]: value
               }
             }
          }
      }
    });
  }

【讨论】:

    猜你喜欢
    • 2019-04-28
    • 1970-01-01
    • 2022-12-06
    • 2020-11-13
    • 2021-09-03
    • 1970-01-01
    • 1970-01-01
    • 2020-04-01
    • 2021-12-29
    相关资源
    最近更新 更多