我有一个带有两个输入的反应形式:
<input type="name" className="form-control" placeholder="Name"/>
<input type="description" className="form-control" placeholder="Description"/>
因为输入字段的类型分别是name
和description
,
我假设在表单提交时,字段this.state.name
和this.state.description
将会更新。
但是,当我提交表单时,这些字段不会更改其值。
表单的完整代码是:
<form>
<div className="form-group">
<label>Name</label>
<input type="name" className="form-control" placeholder="Name"/>
</div>
<div className="form-group">
<label>Description</label>
<input type="description" className="form-control" placeholder="Description"/>
</div>
<button type="submit" onClick={this.handleSubmit} className="btn btn-default">Submit</button>
</form>
如何获取用户填写的值?
答案 0 :(得分:3)
有几种方法可以从表单获取值,其中一种可以使用refs
这样的
<input ref="name" type="name" className="form-control" placeholder="Name"/>
<input ref="description" type="description" className="form-control" placeholder="Description"/>
var name = ReactDOM.findDOMNode(this.refs.name).value,
description = ReactDOM.findDOMNode(this.refs.description).value;
注意 React
版本>= 0.14
的示例,其中react-dom
。对于版本<= 0.13
而不是ReactDOM
,请使用React
您也可以像这样使用states
<input onChange={this.updateName} type="name" className="form-control" placeholder="Name"/>
<input onChange={this.updateDescription} type="description" className="form-control" placeholder="Description"/>
handleSubmit: function (e) {
e.preventDefault();
var name = this.state.name;
description = this.state.description;
},
getInitialState: function () {
return { name: '', description: '' };
},
updateName: function (e) {
this.setState({ name: e.target.value });
},
updateDescription: function (e) {
this.setState({ description: e.target.value });
}
答案 1 :(得分:2)
您应该像原始文档中所说的那样https://facebook.github.io/react/docs/forms.html#controlled-components
我修改了文档中的代码示例以适合您的情况。我知道这可以做得更有活力,但为了简单起见,我这样做了。
getInitialState: function() {
return {
valueName: 'Name',
valueDesc: 'Description'
};
},
// here you handle all the changes in the input
handleNameChange: function(event) {
this.setState({valueName: event.target.value});
},
handleDescChange: function(event) {
this.setState({valueDesc: event.target.value});
},
render: function() {
return (<div>
<input type="name" value={this.state.valueName} onChange={this.handleChange} />
<input type="description" value={this.state.valueDesc} onChange={this.handleChange} />
</div>);
}