【问题标题】:Array is not being updated via onChange handler in reactjs数组未通过 reactjs 中的 onChange 处理程序更新
【发布时间】:2020-04-30 10:32:32
【问题描述】:

我正在尝试将在单击 GUI 上的“添加”按钮时添加的单独输入元素中输入的每个值添加到数组中。

没有初始数组,所以请不要从初始数组的任何映射中放入索引。

当用户单击 GUI 上的添加按钮时会添加多个输入元素,下面的方法 subDivs() 解释了这一点。

所以我在 onChange 处理程序中将计数器值作为索引传递,但此代码不起作用。真的在寻找一些富有成效的投入,也许我错过了一些重要的部分。

  handleChange(event, index) {
    event.preventDefault();
    let { nameArray } = this.state;
    nameArray[index] = event.target.value;
    this.setState({nameArray}, () => console.log("Array ", nameArray))
  }

addRow() {
    this.setState({ count: this.state.count + 1 })
  };

  subDivs() {
    let count = this.state.count, uiItems = [];
    var { names } = this.state;
    let options2 = names.map(name2 => {
      return { value: name2.name, label: name2.name };
    })
    while (count--)
      uiItems.push(
        <div className="newName" key={this.nextUniqueId()}>
          <div className="input-group mb-3" >
            <input id={count+1} type="text" className="form-control" placeholder="Enter Name"
              onChange={(e) => this.handleChange(e, count+1)}
            />
          </div>
        </div>
      )
    return uiItems;
  }

【问题讨论】:

    标签: arrays reactjs input


    【解决方案1】:

    可能会有所帮助。

    handleChange(event) {
        event.preventDefault();
        let { nameArray } = this.state;
        if (!Array.isArray(nameArray)) nameArray = [];
        nameArray.push(event.target.value);
        this.setState({nameArray}, () => {
          return {
            nameArray
          };
        });
      }

    【讨论】:

    • 这个解决方案确实有效,但是我输入了每个字母并作为一个单独的元素添加到一个数组中,如下所示,我怎样才能获得输入的最终值,例如“Test”和“Name”
    • ``` 数组 [ "T" ] 数组 [ "T", "Te" ] 数组 (3) [ "T", "Te", "Tes" ] 数组 (4) [ " T”、“Te”、“Tes”、“Test”] 数组(5)[“T”、“Te”、“Tes”、“Test”、“N”] 数组(6)[“T”、“ Te”, “Tes”, “Test”, “N”, “Na” ] Array(7) [ “T”, “Te”, “Tes”, “Test”, “N”, “Na”, “Nam " ] Array(8) [ "T", "Te", "Tes", "Test", "N", "Na", "Nam", "Name" ]
    • 可能有一些事件,而不是 onChange,您确认这是我要添加的名称。只需在该事件上调用上述方法即可。
    • 像这样:onChange={(e) => this.handleChangeHN(e)}
    • 你的意思是我应该创建一个方法来捕获当前值,而另一个方法则将该值添加到数组中?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-28
    • 1970-01-01
    • 2019-06-12
    • 2020-07-12
    • 2018-01-01
    • 2014-11-17
    相关资源
    最近更新 更多