React:通过输入字段将对象添加到状态数组中

时间:2018-02-07 12:52:52

标签: javascript reactjs

所以,我想读取两个文本字段值并使用按钮重置我的状态。这是我的代码:

this.state = {

  items: [{
    name: 'Cola',
    price: 1.20
  }, {
    name: 'Stuff',
    price: 0.50
  }, {
    name: 'Beer',
    price: 0
  }
]
};


handle = (name, price) => {
    this.addProductToBasket(name, price);
  }

addProductToBasket = (name, price) => {

    var newArray = this.state.items.slice();

    var itemToBeAdded = {
      name : name,
      price : price
    }; 

    newArray.push(itemToBeAdded);
    console.log(newArray)

    this.setState( {items:newArray} )

}


<form onSubmit={ () => this.handle(this.state.items.name, this.state.items.price)}>
  <input type="text" name='name' value={this.state.items.name}/>
  <input type="text" name='price' value={this.state.items.price}/>
  <button type="submit" value="Submit">BUTTON</button>
</form>

我测试了

  

addProductToBasket

它有效!我在Chrome中调试了代码,我只是未定义 name price

3 个答案:

答案 0 :(得分:0)

传递给handle函数的参数不正确。它们当前是指状态中的项数组,但它应该引用输入字段值。

创建this.state.input.namethis.state.input.price之类的内容。这些必须由文本字段onChange处理程序设置。

答案 1 :(得分:0)

首先更改您的状态以包含onPost: function () { this.nonAjaxPosted = true; this.abortXHRs() }, name

price

您想要添加一个新函数来处理输入字段中的更改。称之为this.state = { name: '', price: '', items: [...] } 。它接受事件,获取输入的名称,并设置该键的适当状态值。

handleInput

这是相应的JSX:

handleInput(e) {
  let { name, value } = e.target;
  if (name === 'price') value = +value;
  this.setState({ [name]: value });
}

here's a working demo 。查看控制台,了解 <input type="text" name="name" onChange={this.handleInput} value={this.state.name} /> <input type="text" name="price" onChange={this.handleInput} value={this.state.price} /> 的更改。

答案 2 :(得分:0)

正如@sketchedin指出的那样,传递的参数不是用户自己输入的值,而是绑定到状态对象。

为了传递参数,您必须调用onChange()函数,但是如果要从表单的句柄函数调用它,则应确保捕获当前输入值(即参数传递应该绑定到输入而不是状态对象。)

handleSubmit(event) {
  event.preventDefault();
  const form = event.target;
  const data = new FormData(form);

  const name = form.elements[name];
  const price = form.elements[price];

  this.addProductToBasket(name, price);
}

我们在上面的行中做的是我们使用DOM api的表单元素并获取正确的输入值而不是使用REACT来操作表单。