根據react docs你應該做的是爲你的輸入值有一個支持狀態字段。在反應中,這被稱爲受控輸入。在更改每個輸入時,將該輸入值存儲到狀態中。既然你想要一個數組的價格,那麼你需要一些狀態變量設置爲一個數組,然後在每次輸入更改時,將新值存儲在該狀態數組中。在渲染時,您需要再次設置輸入值,以便它可見。
class BankForm extends React.Component {
constructor() {
super();
this.onSubmit = this.onSubmit.bind(this);
this.state = {
price: [
21,
55
]
};
}
onSubmit(e) {
e.preventDefault();
console.log(this.state.price);
}
onPriceChange(index, e) {
var prices = this.state.price.slice();
prices[index] = e.target.value;
this.setState({
price: prices
});
}
render() {
return (
<div>
<form onSubmit={this.onSubmit}>
<input type="number" value={this.state.price[0]} onChange={this.onPriceChange.bind(this, 0)} />
<input type="number" value={this.state.price[1]} onChange={this.onPriceChange.bind(this, 1)} />
<button type="submit">Submit</button>
</form>
</div>
);
}
}
在這個例子中
我通過預先設定數組值默認的文本框的值,但可以通過使用一個空數組這樣
this.state = {
price: []
};
每個輸入改變已經其onChange事件連接到onPriceChange功能。該函數通過複製價格數組來更新狀態,然後使用傳入的索引設置一個新值。
onPriceChange(index, e) {
var prices = this.state.price.slice();
prices[index] = e.target.value;
this.setState({
price: prices
});
}
最後的onsubmit只是打印的當前狀態到控制檯
onSubmit(e) {
e.preventDefault();
console.log(this.state.price);
}
我有一個工作example on webpackbin here你可以玩。我知道,如果你有很大的表格,這看起來像很多工作,但有一個我喜歡的庫,這使得這個非常簡單,稱爲formsy。
Formsy通過使用mixins並允許您構建可複用的表單組件(如文本框,組合框等)來包裝所有這些工作。將它們放置在窗體表單組件中,並且在onsubmit事件中神奇地您有一個很好的模型來處理所以你的代碼可以看起來像這樣。
import Formsy from 'formsy-react';
const MyAppForm = React.createClass({
getInitialState() {
return {
canSubmit: false
}
},
enableButton() {
this.setState({
canSubmit: true
});
},
disableButton() {
this.setState({
canSubmit: false
});
},
submit(model) {
someDep.saveEmail(model.email);
},
render() {
return (
<Formsy.Form onValidSubmit={this.submit} onValid={this.enableButton} onInvalid={this.disableButton}>
<MyOwnInput name="email" validations="isEmail" validationError="This is not a valid email" required/>
<button type="submit" disabled={!this.state.canSubmit}>Submit</button>
</Formsy.Form>
);
}
});
在你的表單的提交處理程序中formsy會給你一個你的輸入值生成的模型。在封面之下,Formsy正在爲每個輸入類型設置支持狀態字段,所以你不必這麼做。
給你的表單字段不同的名稱,比如'price1'和'price2'。在'onSubmit'中將它們的值轉換爲數組。 –
如果有很多輸入 例如價格,名稱,內容,這是複雜的... –
用戶添加輸入 –