【antd】输入控件的思想
antd对于form中输入控件的抽象十分简单,只要能接收value和onChange属性的组件都可以成为Form.Item的子组件,为Form对应的字段提供值。对于输入控件的抽象我认为这已经达到了极致,事件(onChange)产生值(value)。事件向上,值向下,完全符合React哲学。
如何实现一个标准的输入组件?
对于输入组件首先需要具备接收value和onChange属性的能力,这两个属性被提供的情况下这个组件被称为受控组件,它受到父组件控制,状态来自父组件。当父组件没有提供value的情况下该组件是非受控组件,有自己的状态。
是否受控主要取决于value属性是否提供,因为value决定了组件当前的状态,当前状态被父组件控制,所以称之为受控组件。
输入组件的状态是会改变的,最常见的方式就是来自用户行为,例如在input中输入内容,该组件的状态(value)就会改变。
- 因为组件可以作为非受控组件,所以组件自身有innerValue和setInnerValue用于展示和响应用户输入。
- 如果父组件没有提供value
- 组件使用自身的setInnerValue响应用户输入,改变自身状态innerValue
- 如果父组件提供onChange,在setInnerValue同时触发onChange事件通知父组件
- 如果父组件提供了value,组件失去了决定自身状态的能力(自身不会直接响应用户输入)
- 如果父组件提供onChange函数,则使用该函数响应用户输入
- 组件自身的setInnerValue不会响应用户输入(setInnerValue的作用是修改innerValue,因为有父组件的value,innerValue会响应value的变化,所以setInnerValue不应该直接修改innerValue导致其和value不一致)
function Input (props) {const [innerValue, setInnerValue] = useState(props.value);useEffect(() => {if ('value' in props) setInnerValue(props.value)}, [props.value])function handleChange (ev) {if (!('value' in props)) {setInnerValue(ev.target.value)}props.onChange?.(ev.target.value)}return <input value={innerValue} onChange={handleChange} />
}
【antd】输入控件的思想相关推荐
- INFO:InstallShield InstallScript工程中自定义界面文本输入控件的两个注意事项
在使用InstallScript工程增加自定义界面过程中,我用到了文本输入控件(Edit Field),用于用户名和密码的输入. 首先是用户名,如果用户名长度超过我的控件长度时,发现无法再继续输入内容 ...
- WPF IP地址输入控件的实现
WPF IP地址输入控件的实现 原文:WPF IP地址输入控件的实现 一.前言 WPF没有内置IP地址输入控件,因此我们需要通过自己定义实现. 我们先看一下IP地址输入控件有什么特性: 输满三个数字焦 ...
- 正则表达式——WPF输入控件TextBox 限定输入特定字符
正则表达式--WPF输入控件TextBox 限定输入特定字符 原文:正则表达式--WPF输入控件TextBox 限定输入特定字符 概念: 正则表达式是对字符串操作的一种逻辑公式, 就是用事先定义好的一 ...
- jquery-文档操作-标签取值-输入控件取值与赋值
html 文本 值 获取标签包裹的内容 dom的属性 jquery的方法 演练 小结 dom对象,jquery对象,取值方式的对等 对象 纯文本 html文本 dom innerText innerH ...
- 一起学Windows Phone7开发(十三.三 输入控件)
在Phone7中主要的输入控件其实就有两个,一个是textbox,另一个就是password控件.这两个控件中尤其是TextBox控件有了很多新特性. 一.PasswordBox: 密码框控件,用 ...
- 给大家介绍一个日期输入控件javascript实现,我修改了下,符合我的习惯了,^_^!...
最终效果如图: <formname="form1"method="post"action=""> <p> <i ...
- php支付密码控件,Android高仿微信支付密码输入控件实例代码
这篇文章主要为大家详细介绍了Android高仿微信支付密码输入控件的具体实现代码,供大家参考,具体内容如下 像微信支付密码控件,在app中是一个多么司空见惯的功能.最近,项目需要这个功能,于是乎就实现 ...
- ExtJS4.2学习(17)表单基本输入控件Ext.form.Field(转)
鸣谢:http://www.shuyangyang.com.cn/jishuliangongfang/qianduanjishu/2013-12-11/189.html --------------- ...
- 创建输入控件(input控件、文本框、密码框、单项选择、多项选择、重置与提交按钮的设置)
创建输入控件 input控件的相关概念 input控件的属性 input控件的类型 文本框的设置 密码框的设置 单项选择的设置 多项选择的设置 重置与提交按钮的设置 综合运用 相关概念选择题及参考答案 ...
最新文章
- python中关于input和raw_input的使用方法
- JSP怎么将表单提交到对应的servlet
- Reflection,Regular Expression,Threading,IO,AppDomain,Web Service/Remoting Service,ORM
- Eclipse CDT Hello World工程makefile分析
- 如何在ui5 xml view中使用嵌入的自定义css style
- Linux Shell——-if -eq,if -ne,if -gt[笔记]
- 高质高效软件开发组织能力模型
- 计算机二级法律一班题目,湖南省计算机二级考试 程序设计题目精选30道
- A - Cube Stacking(带权并查集)
- java并发之线程安全---java并发编程实践
- phonegap文件上传(java_php),Android应用开发之使用PhoneGap实现位置上报功能
- cocos2d-x 粒子编辑器和使用
- 51单片机入门(4)蜂鸣器(无源+有源)
- 计算机切换用户界面,win7系统登录界面切换用户的方法
- KGB知识图谱凭借OCR文字识别突破文档解析局限
- Android 九宫格图片展示的实现
- 无需注册账号从官网下载VMware Workstation
- C语言中的char用法
- 科学动画制作工具——Blender
- linux系统重装win7 磁盘格式为gpt,怎么更改为,win10改win7怎么将硬盘格式由gpt转mbr?...
热门文章
- Mybatis 在 insert 之后想获取自增的主键 id,但却总是返回1
- 201521123032 《Java程序设计》第7周学习总结
- HDU-4527 小明系列故事——玩转十滴水 模拟
- mysql my.cnf在哪里_my.cnf配置文件在哪
- wxpython下载缓慢_我可以在wxPython的wx.grid.Grid中加速优化GridCellAttr的使用吗?
- “引用作为函数参数”与 “引用作为函数返回值”
- python中能够处理的最大整数是_实例讲解Python中整数的最大值输出
- C如何将二维数组作为返回值
- linux ftp解压命令 cannot fid or open,Linux环境搭建及常用shell命令集锦
- java rx.observable_Rxjava2 Observable的条件操作符详解及实例