Forms
表单不同于其他 HTML 元素,因为它要响应用户的交互,显示不同的状态,所以在 React 里面会有点特殊,这正是需要单独一篇文章来讲述的原因。
表单元素有这么几种状态属性:
- value 对应的
<input>
and<textarea>
components. - checked 对应的 checkbox or radio
- selected 对应的 option
表单元素可以包含以上任意一种状态属性,且支持 onChange 事件监听状态值的更改。
受控组件
一旦你设置了value
属性这就表明此表单元素为受控组件,所谓的受控
其意图表明,一个表单元素的更改,以及其UI的变更都需要受到React
的控制。
如果你设置了value
却未设置onChange
事件,React
会在控制台打印一条警告信息,虽然这不会报错。
如果你需要在希望输入的值可以反映到输入框中,你需要在onChange
事件中改变value
的值,比如:
constructor(props){
super(props);
this.state = {
value: 'hello'
}
}
handlerChange (e){
this.setState({
value: e.target.value
});
}
render (){
const { value } = this.state;
reutrn (
<input type="text" value={value} onChange={this.handleChange.bind(this)} />;
);
}
非受控组件
相对于受控组件
,非受控组件对于用户的要求和预期显然降低了许多,如果需要填写一个默认值,你需要使用defaultValue
属性。
同时非受控组件
依然可以注册onChange
事件,来响应用户的操作。
Why?
推荐大家阅读完:Why Controlled Components 这一小节,思想个人认为还是很有必要的。