反应 - 获取输入

时间:2015-10-16 12:09:59

标签: javascript reactjs

我有一个带有两个输入的反应形式:

<input type="name" className="form-control" placeholder="Name"/>
<input type="description" className="form-control" placeholder="Description"/>

因为输入字段的类型分别是namedescription, 我假设在表单提交时,字段this.state.namethis.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>

如何获取用户填写的值?

2 个答案:

答案 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;

Example

注意 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 });
}

Example

答案 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>);
      }