react:受控组件与非受控组件
2023-09-27 14:27:09 时间
背景
<input value={this.state.inputValue} />
当用户对input进行操作时,没有对inputValue进行setState()操作,这个值不变,也就意味着input显示不变。
受控组件
每个状态的改变都有一个与之相关的处理函数。
inputChange = e => this.setState({value: e.target.value})
render() {
return (
<input value="this.state.value" onChange={this.inputChange}/>
)
}
表单举例:https://react.docschina.org/docs/forms.html
非受控组件
非受控组件数据是通过dom进行处理。使用场景:
- 必须手动操作dom元素,setState 实现不了
- 文件上传
<input type="file">
- 富文本编辑器,需要传入dom
例一
class NameForm extends React.Component {
constructor(props) {
super(props);
// 创建 ref
this.nameInputRef = React.createRef()
this.fileInputRef = React.createRef()
}
render() {
return (
<div>
<input defaultValue={this.state.name} ref={this.nameInputRef} />
<button onClick={this.alertName}>alertName</button>
</div>
);
// or
return (
<div>
<input type="checkbox" defaultChecked={this.state.flag} />
</div>
)
// or
return (
<div>
<input type="file" ref={this.fileInputRef} />
</div>
)
}
alertName = () => {
// 通过ref获取dom节点
const elem = this.nameInputRef.current
alert(elem.value)
}
alertFile = () => {
// 通过ref获取dom节点
const elem = this.fileInputRef.current
alert(elem.files[0].name)
}
}
例二
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>
);
}
}
如官方文档中例子,此时将input通过ref暴露给组件,可以通过this.input进行访问。
相关文章
- React组件属性部类(propTypes)校验
- 数据仓库组件:HBase集群环境搭建和应用案例
- 【Vue】非单文件组件的全局组件和局部组件示例(图文+完整代码)
- react-native 封装 VedioPlayer 组件
- react-native 组件默认属性(defaultProps) 及 属性类型验证(PropTypes)
- react 项目实战(六)提取布局组件
- react 项目实战(四)组件化表单/表单控件 高阶组件
- vue2.0 之 douban (三)创建header组件
- react-native 组件之间传值
- Vue组件通信
- Activiti实战. 1.5Activiti架构与组件
- 从零开始的react入门教程(五),了解react中的表单,何为受控组件与非受控组件
- 从零开始的react入门教程(二),从react组件说到props/state的联系与区别
- Vue组件间的通信【子传父,父传子,同级传递,爷孙传递】
- 快应用tabs和video组件滑动事件优先级问题
- 《Java EE 7精粹》—— 3.3 复合组件
- 《iOS组件与框架——iOS SDK高级特性剖析》——第6章,第6.2节打造播放引擎
- 《iOS组件与框架——iOS SDK高级特性剖析》——第6章,第6.6节练习
- 使用原生js将轮播图组件化
- SwiftUI UIKit WWDC21 新增UIWindowsScene组件之 01 keyWindow
- SwiftUI iOS 基础组件之照片相册选择器(教程含源码)
- SwiftUI CloudKit 核心对象与组件之 02 CKRecord 管理数据的基本对象
- 安卓APT技术讲解(下)-实现安卓组件化的路由功能
- Vue知识点总结(9)——局部组件的创建和使用(超级详细)
- react路由组件&&非路由组件
- React创建组件的3种写法
- React值组件的三大特性
- uni-app 在组件中触底分页的方法
- vue组件调用(用npm安装)
- react基础知识,jsx规则,组件定义
- 浅析Vue3新特性-Teleport(任意传送门也称瞬间移动):为什么需要Teleport、与React的Portals特性、如何使用(直接使用、与组件搭配使用、使用多个teleport)、teleport API(to及disabled使用介绍)
- 从netty-example分析Netty组件
- React 组件嵌套 父子关系
- Ambari组件状态从MySQL同步到SQLServer或者MySQL
- React:声明组件的方式,看这篇就够了
- vue封装组件,类似elementUI组件库打包发布到npm上