Antd Form校验没有效果的问题

news2024/9/29 1:19:36

问题是这样的:

环境:

antd@4.x

现象:

在这里插入图片描述
如上页面

  1. 出现页面后直接点击按钮触发校验,不会有校验提示,页面没有任何反应
  2. 假如只有其中任何一个,校验正常 比如,没有“模型编码”,只有“模型名称”
  3. 假如先手动在一个框里输入,之后正常 比如,先在“模型名称”里面输入一个值,之后再点按钮

背景:

“模型名称”和“模型编码”都是antd@4.x - Form,使用Form的validator进行校验

界面代码大致如下

<Form.Item label="模型名称">
          {getFieldDecorator('name', {
            rules: [
              { validator: checkModelCode },
            ],
          })(<Input />)}
        </Form.Item>
<Form.Item label="模型编码">
          {getFieldDecorator('key', {
            rules: [
              { validator: checkModelCode },
            ],
          })(<Input />)}
        </Form.Item>

调用的方法,代码大致如下:

checkModelCode: [
      function*({ delayTimeout, callback }, { call }) {
        if (delayTimeout) {
          yield call(delay, delayTimeout);
        }
        try {
          const { res } = yield call(checkModelCode);
          if(callback){
            callback(res);
          }
        } catch (err) {
          if(callback){
            callback();
          }
        }
      },
      { type: 'takeLatest' },
    ]

原因:

上面的checkModelCode方法中,callback是form的validator方法的参数,作为参数传给了checkModelCode方法
不论校验是否通过,callback方法都是要执行的。否则就无法出现预期的校验效果

而校验方法checkModelCode是takeLatest类型,也即只响应最新的请求。所以,
当我们点击按钮触发校验时,“模型编码”和“模型名称”都会调用checkModelCode,此时只有后一个请求会被响应,也即前一个请求被取消掉,那对应的callback方法也无法被执行到,因此页面没有校验效果
类似于官网:
在这里插入图片描述
之所以在一个框里输入值之后,一切正常,大概是因为输入值已经触发了对这个框的校验。因此,之后点击按钮对整个表单进行校验的时候,antd不会再校验这个表单。

解决办法:

不想去掉takeLatest的话,可以给两个表单分别定义校验的方法,如下:

validateModelName: [
      function*({ callback, delayTimeout }, { call }) {
        if (delayTimeout) {
          yield call(delay, delayTimeout);
        }
      },
      { type: 'takeLatest' },
    ],
    validateModelKey: [
      function*({ callback, delayTimeout }, { call }) {
        if (delayTimeout) {
          yield call(delay, delayTimeout);
        }
      },
      { type: 'takeLatest' },
    ],

其实按照逻辑也应该是这样,自身表单防止连点,不能俩表单的请求混着一起处理呀

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

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

相关文章

变分推断 (Variational Inference) 解析

前言 如果你对这篇文章可感兴趣&#xff0c;可以点击「【访客必读 - 指引页】一文囊括主页内所有高质量博客」&#xff0c;查看完整博客分类与对应链接。 变分推断 在贝叶斯方法中&#xff0c;针对含有隐变量的学习和推理&#xff0c;通常有两类方式&#xff0c;其一是马尔可…

Python爬虫:如何自动化下载网站图片

目录 Requests 访问页面 XPath 定位 JSON 对象 如何使用 XPath 自动下载百度图片 Selenium 库模拟浏览器 Requests 访问页面 Requests 是 Python HTTP 的客户端库&#xff0c;编写爬虫的时候都会用到&#xff0c;编写起来也很简单。它有两种访问方式&#xff1a;Get 和 P…

王道操作系统课代表 - 考研计算机 第五章 输入输出管理 究极精华总结笔记

本篇博客是考研期间学习王道课程 传送门 的笔记&#xff0c;以及一整年里对 操作系统 知识点的理解的总结。希望对新一届的计算机考研人提供帮助&#xff01;&#xff01;&#xff01; 关于对 “输入输出管理” 章节知识点总结的十分全面&#xff0c;涵括了《操作系统》课程里的…

基于.NET 7 + iView 的前后端分离的通用后台管理系统开源框架

更多开源项目请查看&#xff1a;一个专注推荐.Net开源项目的榜单 今天给大家推荐一套前后端分离通用后台管理系统开源框架。 项目简介 这是基于.Net 7 Vue.js开发的、前后端分离框架&#xff0c;前端UI框架采用iView&#xff0c;该项目只有基础功能模块&#xff0c;不包含具…

VMware虚拟机安装centos(超详细图文教程)

1、centos下载 Ubuntu下载地址&#xff1a;点这里 下载不成功的也可关注公众号获取&#xff1a;待更新 2、打开VMware VMware安装过程&#xff1a;待更新 2.1 创建新的虚拟机 2.2 一般情况都会选择典型&#xff08;如果这里有需要选择自定义的一般也不会看教程了&#xff…

【Spark分布式内存计算框架——Spark Streaming】10. 应用案例:百度搜索风云榜(中)实时数据ETL存储

5.3 实时数据ETL存储 实时从Kafka Topic消费数据&#xff0c;提取ip地址字段&#xff0c;调用【ip2Region】库解析为省份和城市&#xff0c;存储到HDFS文件中&#xff0c;设置批处理时间间隔BatchInterval为10秒&#xff0c;完整代码如下&#xff1a; package cn.itcast.spar…

华为机试题:HJ94 记票统计(python)

文章目录&#xff08;1&#xff09;题目描述&#xff08;2&#xff09;Python3实现&#xff08;3&#xff09;知识点详解1、input()&#xff1a;获取控制台&#xff08;任意形式&#xff09;的输入。输出均为字符串类型。1.1、input() 与 list(input()) 的区别、及其相互转换方…

linux和windows中安装emqx消息服务器

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号雄雄的小课堂 现在是&#xff1a;2023年3月1日21:53:55 前言 最近几天看了下mqtt&#xff0c;通过不断的搜索资料&#xff0c;也将mqtt集成到项目中&#xff0c;跑了个demo运行&#xff0c;和预想中的差不多&#x…

Altair 宣布将于3月举办 Future.Industry 2023 全球虚拟大会

Altair&#xff08;纳斯达克股票代码&#xff1a;ALTR&#xff09;近日宣布将于 2023 年 3 月 8 - 9 日 举办年度全球虚拟大会 Future.Industry 2023。旨在探索影响全球未来的新趋势&#xff0c;并深入探讨仿真、高性能计算 (HPC)、人工智能&#xff08;AI&#xff09;和数据分…

使用jenkins+nginx自动化部署前后端项目并打包备份

前言&#xff1a;因为之前使用docker拉取的jenkins无法检测到本地服务器安装的jdk和maven&#xff0c;所以我在本地服务器直接拉取了jenkins&#xff0c;使用8090端口与docker拉取的jenkins进行对比&#xff0c;可以检测到本地服务器安装的jdk和maven&#xff0c;前端和后端分开…

ETHDenver 2023

ETHDenver是全球最大、持续时间最长的以太坊活动之一&#xff0c;今年的活动定于2月24日至3月5日在美国科罗拉多州丹佛市盛大举行。这次活动将面向以太坊和其他区块链协议爱好者、设计者和开发人员。Moonbeam作为ETHDenver 2023的Meta赞助商&#xff0c;将在本次活动中展示令人…

如何使用crAPI学习保护API的安全

关于crAPI crAPI是一个针对API安全的学习和研究平台&#xff0c;在该工具的帮助下&#xff0c;广大研究人员可以轻松学习和了解排名前十的关键API安全风险。因此&#xff0c;crAPI在设计上故意遗留了大量安全漏洞&#xff0c;我们可以通过 crAPI学习和研究API安全。 crAPI采用…

如何把照片的底色修改为想要的颜色

如何给照片更换底色&#xff1f;其实有可以一键给照片更换底色的 APP &#xff0c;但是几乎都要收费。如果想要免费的给照片更换底色的话&#xff0c;分享两种简单便捷的方法给你。掌握了这项技能&#xff0c;以后就不用店花钱处理啦&#xff01;1、免费&#xff01;线上快速 给…

【SpringBoot教程】SpringBoot入门

SpringBoot介绍 SpringBoot简介 在您第1次接触和学习Spring框架的时候&#xff0c;是否因为其繁杂的配置而退却了&#xff1f;在你第n次使用Spring框架的时候&#xff0c;是否觉得一堆反复黏贴的配置有一些厌烦&#xff1f;那么您就不妨来试试使用Spring Boot来让你更易上手&…

Rancher Prime 为平台工程提供面向 K8s 的弹性能力

作者简介 张应罗&#xff0c;SUSE 资深架构师&#xff0c;拥有 16 年架构咨询工作经验&#xff0c;专注于 SUSE Enterprise Container Management 相关的产品落地方案及咨询方案设计。 平台工程 “DevOps 已死&#xff0c;平台工程才是未来!” 去年&#xff0c;知名软件工程师…

原来JS可以这么实现继承

当我们在编写代码的时候&#xff0c;有一些对象内部会有一些方法&#xff08;函数&#xff09;&#xff0c;如果将这些函数在构造函数内部声明会导致内存的浪费&#xff0c;因为实例化构造函数得到不同的实例对象&#xff0c;其内部都有同一个方法&#xff0c;但是占据了不同的…

【unity】开发rts 4 放置建筑进地图;创建单位;单位移动;单位生产者

一 放置建筑进地图 1 GameManage&#xff0c;slot faction阵营插槽&#xff0c; 新建筑拖进secne&#xff0c;便于管理&#xff0c;在实例栏将建筑放在factions下 inital faction entitys&#xff0c;&#xff08;也可带上cam look at&#xff09; 添加新建筑上 此时测试&a…

大专生学云计算,工作好找吗?

当然可以找到工作。云计算行业整体是处理高速成长期&#xff0c;市场规模以每年30%的速度增长&#xff0c;市场的扩张意味着需要更多的技术人才支撑&#xff0c;据统计云计算未来五年人才缺口将达到150万。 目前企业对于学历的要求并不高&#xff0c;基本大专及以上都可以的。…

基于神经网络(RBF)补偿的双关节机械手臂自适应控制

目录 前言 1.双关节机械手臂模型 1.1 实际模型 1.2 名义模型 2. 控制律设计 3. 神经网络补偿自适应律设计 3.1自适应律① 3.2自适应律② 4. 仿真分析 4.1仿真模型 4.2 仿真结果 4.3 小结 5学习问题 前言 所谓的补偿可以简单的理解为&#xff1a;将扰动的模型估计出…

【C++】开散列实现unordered_map与unordered_set的封装

本文主要介绍unordered_map与unordered_set的封装&#xff0c;此次封装主要用上文所说到的开散列,通过开散列的一些改造来实现unordered_map与unordered_set的封装 文章目录一、模板参数二、string的特化三、正向迭代器四、构造与析构五、[]的实现六、unordered_map的实现七、u…