render
方法中的代码表示任何给定时间的组件。如果你做这样的事情,用户将无法使用表单控件进行选择:
<select value="Radish">
<option value="Orange">Orange</option>
<option value="Radish">Radish</option>
<option value="Cherry">Cherry</option>
</select>
因此,有两种使用表单控件的解决方案:
- 受控组件使用组件
state
来反映用户的选择。这提供了最多的控制,因为您所做的任何更改state
都将反映在组件的渲染中:
例子:
var FruitSelector = React.createClass({
getInitialState:function(){
return {selectValue:'Radish'};
},
handleChange:function(e){
this.setState({selectValue:e.target.value});
},
render: function() {
var message='You selected '+this.state.selectValue;
return (
<div>
<select
value={this.state.selectValue}
onChange={this.handleChange}
>
<option value="Orange">Orange</option>
<option value="Radish">Radish</option>
<option value="Cherry">Cherry</option>
</select>
<p>{message}</p>
</div>
);
}
});
React.render(<FruitSelector name="World" />, document.body);
JSFiddle:http : //jsfiddle.net/xe5ypghv/
不受控制的组件另一种选择是不控制值并简单地响应onChange
事件。在这种情况下,您可以使用defaultValue
prop 设置初始值。
<div>
<select defaultValue={this.state.selectValue}
onChange={this.handleChange}
>
<option value="Orange">Orange</option>
<option value="Radish">Radish</option>
<option value="Cherry">Cherry</option>
</select>
<p>{message}</p>
</div>
http://jsfiddle.net/kb3gN/10396/
这方面的文档很棒:http : //facebook.github.io/react/docs/forms.html
并且还展示了如何使用多个选择。
更新
选项 1(使用受控组件)的一个变体是使用Redux和React-Redux创建容器组件。这涉及到connect
一个mapStateToProps
函数,这比听起来容易,但如果您刚刚开始,可能会矫枉过正。