【antd】输入控件的思想

antd对于form中输入控件的抽象十分简单,只要能接收value和onChange属性的组件都可以成为Form.Item的子组件,为Form对应的字段提供值。对于输入控件的抽象我认为这已经达到了极致,事件(onChange)产生值(value)。事件向上,值向下,完全符合React哲学。

如何实现一个标准的输入组件?

对于输入组件首先需要具备接收value和onChange属性的能力,这两个属性被提供的情况下这个组件被称为受控组件,它受到父组件控制,状态来自父组件。当父组件没有提供value的情况下该组件是非受控组件,有自己的状态。

是否受控主要取决于value属性是否提供,因为value决定了组件当前的状态,当前状态被父组件控制,所以称之为受控组件。

输入组件的状态是会改变的,最常见的方式就是来自用户行为,例如在input中输入内容,该组件的状态(value)就会改变。

  1. 因为组件可以作为非受控组件,所以组件自身有innerValue和setInnerValue用于展示和响应用户输入。
  2. 如果父组件没有提供value
    1. 组件使用自身的setInnerValue响应用户输入,改变自身状态innerValue
    2. 如果父组件提供onChange,在setInnerValue同时触发onChange事件通知父组件
  3. 如果父组件提供了value,组件失去了决定自身状态的能力(自身不会直接响应用户输入)
    1. 如果父组件提供onChange函数,则使用该函数响应用户输入
    2. 组件自身的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} />
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/361928.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java EE 7批处理和魔兽世界–第1部分

这是我在上一个JavaOne上的会议之一。 这篇文章将扩展主题并使用Batch JSR-352 API进入一个实际的应用程序。 此应用程序与MMORPG 魔兽世界集成。 由于JSR-352是Java EE世界中的新规范&#xff0c;所以我认为许多人不知道如何正确使用它。 确定本规范适用的用例也可能是一个挑…

div+css 你知道多少?值得一看

DIVCSS是网站标准&#xff08;或称“WEB标准”&#xff09;中常用术语之一&#xff0c;divcss 是一种网页的布局方法&#xff0c;这一种网页布局方法有别于传统的HTML网页设计语言中的表格&#xff08;table&#xff09;定位方式&#xff0c;可实现网页页面内容与表现相分离。X…

学习笔记-AngularJs(十)

前面一直在说自定义指令&#xff0c;但是却一直没有一次系统地去了解&#xff0c;现在需要我们一起来学习如何去使用自定义指令&#xff0c;去丰富html标签、属性&#xff0c;实现多元化、多功能的标签&#xff08;或是属性&#xff09;。辣么&#xff0c;啥是指令&#xff1f;…

WildFly 9 –别希望您的控制台像这样!

每个人都可能听到这个消息。 周一发布了第一个WildFly 9.0.0.Alpha1版本。 您可以从wildfly.org网站上下载它&#xff0c;最大的变化是它是由一个新的功能配置工具构建的&#xff0c;该工具位于现在单独的核心发行版中&#xff0c;并且还包含一个新的Servlet发行版 &#xff08…

磁盘性能 -- IOPS 和 吞吐量 说明

一. Wikepedia上有关IOPS 的说明链接如下&#xff1a;http://en.wikipedia.org/wiki/IOPSIOPS (Input/Output OperationsPer Second, pronounced i-ops) is a common performance measurement used to benchmark computer storage devices like harddisk drives (HDD), solid s…

webpack联邦模块之webpack运行时

webpack是如何打包ES模块的&#xff1f;webpack是如何构建自身的模块运行时的&#xff1f; __webpack_require__ 这是整个webpack运行时的核心。 该函数被用于根据模块Id从变量__webpack_module_cache__获取模块对应导出&#xff1a; 有&#xff0c;直接返回没有&#xff0…

学习笔记-AngularJs(四)

之前学习的事视图与模版&#xff0c;我们在控制器文件中直接定义一个数组&#xff0c;让其在模版文件中用ng-repeat指令构造一个迭代器&#xff0c;定义的数组http://t.cn/RUbL4rP如同以下&#xff1a; $scope.phones [{name:xioabin,number:18824863682,age:12},{name:xioalo…

3使用Jsoup解析Java中HTML文件的示例

HTML是Web的核心&#xff0c;无论您是通过JavaScript&#xff0c;JSP&#xff0c;PHP&#xff0c;ASP还是任何其他Web技术动态生成的&#xff0c;您在Internet上看到的所有页面都是基于HTML的。 您的浏览器实际上是解析HTML并为您呈现。 但是&#xff0c;如果需要解析HTML文档并…

转载:闲话权限设计三层境界

转自&#xff1a;http://www.cnblogs.com/tsoukw/archive/2010/09/27/1836485.html喜欢金庸的武侠&#xff0c;对他那几部小说也是乐此不疲拿独孤求败来说&#xff0c;他的剑&#xff0c;从无名利剑&#xff0c;玄铁重剑&#xff0c;到木剑乃至最后的无剑&#xff0c;不知道破世…

webpack联邦模块之remotes方法

使用联邦模块后当前项目就会有两个依赖&#xff0c;一个是依赖共享模块&#xff0c;一个是依赖远程模块。运行时webpack/runtime/consumes用于解析共享模块&#xff0c;运行时webpack/runtime/remotes 用于解析远程模块。这两个模块对应的方法分别是__webpack_require__.f.cons…

径向菜单的制作

最终效果&#xff1a; 在径向菜单的制作前&#xff0c;首先需要知道几点知识点&#xff1a; Math.sin(x) x 的正玄值。返回值在 -1.0 到 1.0 之间&#xff1b; Math.cos(x) x 的余弦值。返回的是 -1.0 到 1.0 之间的数&#xff1b; 这两个函数中的X 都是指的“弧度”…

吉首大学2019年程序设计竞赛-F 天花乱坠

题目链接&#xff1a;https://ac.nowcoder.com/acm/contest/992/F 题意&#xff1a;给定正n边形&#xff0c;边长为100&#xff0c;以每条边的中点连线构成新的正n边形&#xff0c;无限循环下去&#xff0c;求所有边的长度和。 思路&#xff1a;简单数学计算题&#xff0c;可以…

SqliteHelper整理

刚开通博客不久&#xff0c;还没有发过文。这是第一篇&#xff0c;要鼓励我自己再接再厉。 另外&#xff0c;我也是刚刚踏上程序员这条路&#xff0c;有赖各位多多提携&#xff01; 闲话不多说&#xff0c;最近参与的项目包含本地化存储这一块。昨天就园子里找了些资料有另外补…

webpack联邦模块之consumes方法

对于使用联邦模块的项目会有两个依赖&#xff0c;一个是远程模块&#xff0c;一个是共享模块。上一篇文章解释了远程模块的加载和安装并初始化共享作用域。consumes则是共享模块的解决方案&#xff0c;用于在运行时加载并安装依赖的共享模块。 为什么叫consumes&#xff1f;我…

vue-cli使用说明

一、安装npm install -g vue-cli 推荐使用国内镜像 先设置cnpm npm install -g cnpm --registryhttps://registry.npm.taobao.org 如果安装失败&#xff0c;可以使用 npm cache clean 清理缓存&#xff0c;然后再重新安装 然后使用 cnpm 安装 vue-cli 和 webpack cnpm inst…

OptaPlanner –具有真实道路距离的车辆路线

在现实世界中&#xff0c;车辆路径问题&#xff08;VRP&#xff09;中的车辆必须走这条路&#xff1a;它们不能在客户之间直线行驶。 大多数VRP研究论文和演示都乐于忽略此实现细节。 和我一样&#xff0c;过去。 尽管使用道路距离&#xff08;而不是空中距离&#xff09;不会对…

自旋锁

什么是自旋锁&#xff1f; 自旋锁&#xff08;spinlock&#xff09;&#xff1a;是指当一个线程在获取锁的时候&#xff0c;如果锁已经被其它线程获取&#xff0c;那么该线程将循环等待&#xff0c;然后不断的判断锁是否能够被成功获取&#xff0c;直到获取到锁才会退出循环。 …

关于如何在PSA众多请求号中查找数据是属于哪一条。

其中有两个TCODE: RSTSODS与RSTSODS&#xff0c;我们可以查找数据源的PSA表&#xff0c;然后在SE16中可以看到。 另外我们对PSA点击管理&#xff0c;一般会出现在窗口上面出现PSA的表名。 当然有些不在的话&#xff0c;那就去查找那两个TCODE。转载于:https://www.cnblogs.com/…

TCP握手为什么需要三次通信

TCP三步握手three way (or three message) handshake 是TCP核心知识点&#xff0c;很长一段时间内我无法理解为什么TCP建立连接需要三次通信&#xff0c;而不是两次或者四次或者更多次。我翻了很多问答和博客&#xff0c;他们说的都很有道理&#xff0c;但是借来的火&#xff0…

小程序用户拒绝授权解决方法

众所周知&#xff0c;小程序进入首先都要进行微信授权的&#xff0c;那万一用户不小心点了拒绝按钮怎么办呢&#xff1f;不要慌&#xff0c;官方早已预料到此情况&#xff0c;并提供了api供开发者使用&#xff0c;下面就一起来研究下api吧 一、API接口 wx.openSetting(OBJECT)…