非受控组件
非受控组件指的是表单的数据不再由React组件进行管理,而是交给DOM节点处理,可以使用refs属性来从DOM节点中获取到数据。
class NameForm extends React.Component {
constructor(props){
super(props);
this.input = React.createRef();
}
handleSubmit(e){
console.log(this.input.current.value);
e.preventDefault();
}
render(){
return (
<form onSubmit={this.handleSubmit.bind(this)}>
<input type="text" ref={this.input} />
<input type="submit" value="submit" />
</form>
)
}
}
非受控组件将代码存储在真实的DOM节点中,可以节省很多代码。
在React组件中,表单元素的value值会覆盖这个DOM节点,如果我们想要给组件添加默认值,又不影响后续的输入,可以使用defaultValue
属性:
<input defaultValue="hi" ref={this.input} />
什么时候用受控组件或非受控组件
受控组件的特点是它和state是类似双向绑定的,也就是通过state可以实时拿到表单中的数据。
所以受控组件能快速响应表单内容的变化,它适用于以下场景:
- 输入实时验证
- 依照某个条件禁用或不禁用一个button
- 强制输入规范
- 多个输入映射到同一份data
非受控组件的使用场景主要有:
- 对DOM 元素焦点的控制、内容选择或者媒体播放;
- 通过对DOM元素控制,触发动画特效;
- 通第三方DOM库的集成。
参考资料:
关于受控和非受控组件
React官方文档
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 模板不会安装或需要功能定制以及二次开发?
发表评论
还没有评论,快来抢沙发吧!