Reactjs 如果我没有';我不知道会有多少输入?

Reactjs 如果我没有';我不知道会有多少输入?,reactjs,Reactjs,动态生成输入字段时,如何重置输入字段?找不到有关此的任何信息。如果我事先知道会有多少字段,那么使用ref或者在每个输入元素和调用getInitialState()上都有唯一的value属性就很容易了 产品数组的大小可能会有所不同,因此如何重置所有输入字段?如果将(非受控)输入包装在HTML元素中,则 <button type="reset">Reset</button> 重置 否则,您可能需要将输入值绑定到prop或state项,然后使用handleReset检索和

动态生成输入字段时,如何重置输入字段?找不到有关此的任何信息。如果我事先知道会有多少字段,那么使用
ref
或者在每个
输入
元素和调用
getInitialState()
上都有唯一的
value
属性就很容易了

产品数组的大小可能会有所不同,因此如何重置所有输入字段?

如果将(非受控)输入包装在HTML
元素中,则

<button type="reset">Reset</button>
重置
否则,您可能需要将输入值绑定到
prop
state
项,然后使用handleReset检索和(重新)设置这些值。当状态或道具中的项目发生更改时,React将自动更新DOM中受影响的部分


阅读文档中有关表单输入的更多信息:

这里的想法就是获取所有输入并使用for来清理它们。请注意,我使用Jquery获取所有输入

<html>
<head>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
    <script>
      function cleanForm(){    
         var allInputs = $( ":input" );
         for (i = 0; i < allInputs.length; i++) { 
           allInputs[i].value = ""; 
         }
      }   
   </script>
</head>
<body>
    <form> 
        <input type="text" name="1"/>
        <input type="text" name="2"/>
        <input type="text" name="3"/>
        <input type="text" name="4"/>
        <input type="button" name="clean" onclick="cleanForm()" value="clean"/>
    </form>
</body>

函数cleanForm(){
变量allInputs=$(“:输入”);
对于(i=0;i

您可以通过值数组设置
此.setState


编辑:正如mgrim所说,您可以使用HTML表单重置。或者,如果你需要更复杂的东西,继续阅读

看看:

var产品=[
{name:'巧克力'},
{name:'Chips'},
{name:'Candy'}
];
//产品阵列的大小可以不同!
var Hello=React.createClass({
handleReset:function(){
var products=this.state.products.map(函数(产品){
返回Object.assign({},product{
数值:0
});
});
this.setState({products:products});
},
handleChange:函数(索引){
返回函数(e){
var products=this.state.products.slice();
var产品=产品[指数];
products[index]=对象.assign({},product{
值:parseInt(e.target.value,10)
});
this.setState({products:products});
}.约束(本);
},
getInitialState:函数(){
返回{
产品:this.props.initialProducts.map(函数(产品){
返回{
名称:product.name,
数值:0
}
})
}
},
render:function(){
var prods=this.state.products.map(函数(项,id){
返回(
  • {item.name}
  • ) }.约束(这个); 返回(
      {prods} 重置
    ); } }); React.render(,document.getElementById('container');
    每次任何输入框发生更改时,都必须调用
    setState
    ,当用户打算重置所有输入时,必须调用
    setState


    此外,我还做了一些重构。我将
    products
    属性重命名为
    initialProducts
    属性。这是因为。

    请您解释一下您的函数是做什么的。只有一段代码不是一个好答案。OP也没有提到使用jQuery,更不用说,这个解决方案没有回答OP的问题。他的问题更多地与React有关,而不仅仅是简单的HTML+JS。
    var products = [
        {name: 'Chocolate'}, 
      {name: 'Chips'}, 
      {name: 'Candy'}
    ];
    // Size of the products array can vary!
    
    var Hello = React.createClass({
        handleReset: function(){
        var products = this.state.products.map(function (product) {
          return Object.assign({}, product, {
            value: 0
          });
        });
        this.setState({products: products});
      },
      handleChange: function(index){
        return function(e){
          var products = this.state.products.slice();
          var product = products[index];
          products[index] = Object.assign({}, product, {
              value: parseInt(e.target.value, 10)
            });
            this.setState({products: products});
        }.bind(this);
      },
      getInitialState: function () {
        return {
          products: this.props.initialProducts.map(function (product) {
            return {
              name: product.name,
              value: 0
            }
          })
        }
      },
      render: function() {
        var prods = this.state.products.map(function(item, id){
            return (
            <li key={id}>
                {item.name}
              <input type="number" value={item.value} onChange={this.handleChange(id)} />
            </li>
          )
        }.bind(this));
        return (
            <ul>
            {prods}
            <button onClick={this.handleReset}>Reset</button>
          </ul>
        );
      }
    });
    
    React.render(<Hello initialProducts={products} />, document.getElementById('container'));