不受控组件指的是,表单数据有DOM元素本身处理。
要编写一个为控制组件,可以使用一个ref来从DOM获得表单值,而不是为每个状态更新编写一个事件处理程序。
例如:
class NameForm extends React.Component {
constructor(props) {
super(props);
this.handleSubmit = this.handleSubmit.bind(this);
}
handleSubmit(event) {
alert('A name was submitted: ' + this.input.value);
event.preventDefault();
}
render() {
return (
<form onSubmit={this.handleSubmit}>
<label>
Name:
<input type="text" ref={(input) => this.input = input} />
</label>
<input type="submit" value="Submit" />
</form>
);
}
}
注:使用不受控组件时很容易实现React代码与非React代码的集成。如果你希望的是快速开发,不要求代码质量,不受控组件可以一定程度上减少代码量。否则应当使用受控组件。
默认值
在不受控组建中,你可能希望React有初始值,这时可以使用defaultValue
属性而不是value
属性。
同样, <input type="checkbox">
和 <input type="radio">
支持 defaultChecked
,而 <select>
和 <textarea>
支持defaultValue
。