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'));