React封装自定义表单校验方法

news2024/11/24 3:09:16
一、表单校验

        为什么要封装自定义表单校验方法,因为在后台管理系统中,通常我们会涉及到用户的添加或则信息的修改,这时候通常就涉及表单的相关校验。但通常一个系统中的表单校验针对同一个字段来说是统一的。因此我们就需要将对应的校验字段的rule中的相关方法抽离出来。因为这样我们就可以保证在不同的页面中使用的方法也是同一个方法,因此我们便可以将项目中所用到对表单字段的校验的方法统一的抽离出来以便更好的使用。

二、实现思路

        下面是一个比较简单的form表单的例子,在这个例子中,通常的做法是我们在表单项中直接写入对应的rules来作为对应的表单规则,代码如下。但是如果这里有一百个相同表单的校验,那么我们就不得不在其中写入100个相同的rules,虽然看起来可能代码量不多,但是如果校验的规则较为复杂的话,其重复量也是比较大的

    <Form.Item<FieldType>
      label="Username"
      name="username"
      rules={[{ required: true, message: 'Please input your username!' }]}
    >
      <Input />
    </Form.Item>

三、自定义表单校验 

        怎么进行表单的自定义呢?我们在ant的官网中可以找到如下的方法,我们可以使用form的API种的rules的相关阐述,我们可以给rules中配置对应的验证规则的数组也可以是一个函数。这里的抽离校验规则我们就需要使用对应的函数了相关的代码写法如下。

        首先问什么我们需要将rules中的message去掉。因为当我们在自定义校验规则的时候,如果在自定义校验规则不通过的情况下,它无法返回我们自定义校验规则的错误提示,会一直显示默认的message的消息提示,虽然下面第二种写法看是满足了,但可能会出现对字符串的校验为空以及长度小于某值时会提示两次。所以在这里我们就统一的将所有的提示交给我们自定义的校验函数,这也比较符合封装的思想。

    <Form.Item<FieldType>
      label="Password"
      name="password"
      rules={[{ required: true,
      validator:(_,value)=>{      //参数分别对应校验规则和当前待校验的值
        return verifyUserName(value)
      }
      }]}
    >

    <Form.Item<FieldType>
      label="Password"
      name="password"
      rules={[{ required: true,message:"123123123"},{
      validator:({},value)=>{
        return verifyUserName(value)
      }
      }]}
    >



export const verifyUserName = (val) =>{
    console.log(val === '')
    if(val === '' || !val ){
        console.log(13)
        return Promise.reject('请输入内容')
    }else if(val.length < 9){
        console.log(123)
        return Promise.reject('请输入内容1')
    }else{
        return Promise.resolve('')
    }
}
四、为什么需要这样写 

        我们可以通过点击跳转到对应的源码上进行查看,可以发现源码上所定义的Validator的数据类型如下,它接口三个参数,分别是校验规则、当前值、回调函数。且其返回的类型是Promise或者void。 由于我们在设计的时候需要将参数传出去,因此我们通过上述方式书写,这样就可以方便我们在自定义函数的时候只传入当前值,而不需要将其他值传入。且Validator接收的是Promise返回值,因此我们就需要在自定义函数的那个书写时返回Promise。最后在使用return 将自定义函数返回的Promise对象再返回给Validator上。最后便完成了自定义函数抽离的方案。这样操作相比于rules中写死会更加方便,我们就需要修改校验函数,从而完成不同校验规则的实现。

     

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

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

相关文章

【LeetCode热题100】--98.验证二叉搜索树

98.验证二叉搜索树 给你一个二叉树的根节点 root &#xff0c;判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下&#xff1a; 节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。 由于二…

41 二叉树的层序遍历

二叉树的层序遍历 题解1 迭代——BFS题解2 递归——DFS 给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 提示&#xff1a; 树中节点数目在范围 [0, 2000] 内-1000 < Node.val <…

实时目标检测:基于YOLOv3和OpenCV的摄像头应用

一、前言 随着人工智能和计算机视觉技术的不断发展,目标检测成为了智能监控、自动驾驶、机器人等领域的关键技术之一。实时目标检测更是对系统的反应速度和准确度提出了更高的要求。本文介绍使用OpenCV和YOLOv3实现实时目标检测的方法,演示如何使用OpenCV调用YOLOv3模型进行…

基于SSM的选课排课系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用Vue技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

克服网络安全压力:如何掌控无限的云数据

管理云中的数字风险比以往任何时候都更加重要。数字化转型引发的云数据呈指数级增长&#xff0c;为安全分析师创造了一个更大的威胁环境。随着威胁行为者继续危害组织最敏感的数据&#xff0c;这一挑战将会加剧。 预计未来五年全球网络犯罪成本将激增&#xff0c;从 2022 年的…

22-框架

框架 解决某类问题&#xff0c;编写的一套类、接口等&#xff0c;可以理解成一个半成品&#xff0c;大多框架都是第三方研发的。 好处&#xff1a;在框架的基础上开发&#xff0c;可以得到优秀的软件架构&#xff0c;并能提高开发效率 框架的形式&#xff1a;一般是把类、接口…

有向图计数优化版原理及C++实现

题目 见前面章节。有向图访问计数的原理及C实现-CSDN博客 第一版 不需要拓扑排序&#xff0c;也不需要并集查找&#xff0c;直接dfs了。完成以下三个职责&#xff1a; 一&#xff0c;DFS那些端点在环上。 二&#xff0c;DFS环上各点此环的长度。 三&#xff0c;DFS非环上各点…

C# 画参数可调调幅波

参阅此&#xff0c; 使用VC输出调幅波的数值和波形_c如何显示下位机传输过来的频谱信号 csdn_bcbobo21cn的博客-CSDN博客 用winform做一下&#xff1b; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Dra…

16-自动化测试——selenium介绍

目录 1.selenium是什么&#xff1f; 2.selenium特点 3.selenium工作原理 1.selenium是什么&#xff1f; selenium是web应用中基于UI的自动化测试框架。 2.selenium特点 支持多平台多浏览器多语言&#xff08;Java、Python、C#、JS、Ruby......&#xff09;有丰富的API 3…

目标检测算法改进系列之Backbone替换为ConvNextV2

ConvNextV2 受掩码自编码机制的启发&#xff0c;本文在 ConvNeXt 的架构基础上延伸出了一个完全卷积掩码自编码器框架——ConvNeXt V2&#xff0c;同时作者设计了一个全新的全局响应归一化(Global Response Normalization, GRN)层以增强原始 ConvNeXt 模块通道间的特征竞争&am…

SpringBoot注册web组件

目录 前言 一、注册Servlet组件 1.1 使用SpringBoot注解加继承HttpServet类注册 1.2 通过继承HttpServet类加配置类来进行注册 二、注册Listener组件 2.1 使用SpringBoot注解和实现ServletContextListener接口注册 2.2 ServletContextListener接口和配置类来进行注册 …

基于YOLOv8的安全帽检测系统(2):Gold-YOLO,遥遥领先,助力行为检测 | 华为诺亚NeurIPS23

目录 1.Yolov8介绍 2.安全帽数据集介绍 3.Gold-YOLO 4.训练结果分析 1.Yolov8介绍 Ultralytics YOLOv8是Ultralytics公司开发的YOLO目标检测和图像分割模型的最新版本。YOLOv8是一种尖端的、最先进的&#xff08;SOTA&#xff09;模型&#xff0c;它建立在先前YOLO成功基础上…

js 如何判断一个指定的位置点坐标是否落在一个多边形区域内?

1 场景 业务场景举例&#xff1a;快递选择收获区域、车辆电子围栏、运动轨迹路线、地理位置信息检测范围和地图等过滤等等。   比方说地图上有一块区域&#xff08;抽象成多边形&#xff09;&#xff0c;然后里面每一个位置点(像素点)都有对应的GPS的经纬度坐标值&#xff0c…

如何破解压缩包zip解压密码?

Zip压缩包设置了密码&#xff0c;解压的时候就需要输入正确对密码才能顺利解压出文件&#xff0c;正常当我们解压文件或者删除密码的时候&#xff0c;虽然方法多&#xff0c;但是都需要输入正确的密码才能完成。忘记密码就无法进行操作。 那么&#xff0c;忘记了zip压缩包的密…

【C++】模板初阶 -- 详解

一、泛型编程 // 实现一个通用的交换函数&#xff1a; void Swap(int& left, int& right) {int temp left;left right;right temp; }void Swap(double& left, double& right) {double temp left;left right;right temp; }void Swap(char& left, ch…

Multisim14.0仿真(二十八)74LS13 施密特触发器

一、仿真原理图&#xff1a; 二、仿真效果图&#xff1a;

华为云云耀云服务器L实例评测|Elasticsearch的springboot整合 Kibana进行全查询和模糊查询

前言 最近华为云云耀云服务器L实例上新&#xff0c;也搞了一台来玩&#xff0c;期间遇到各种问题&#xff0c;在解决问题的过程中学到不少和运维相关的知识。 在前几期的博客中&#xff0c;介绍了Elasticsearch的Docker版本的安装&#xff0c;Elasticsearch的可视化Kibana工具…

【c语言】推箱子

所需知识&#xff1a;c语言枚举&#xff0c;数组&#xff0c;for循环&#xff0c;while循环&#xff0c;switch,case语句&#xff0c;图形库相关函数 1.调整控制台窗口大小 #define _CRT_SECURE_NO_WARNINGS #include <stdlib.h>#include <stdio.h> int main() {…

MySql017——组合查询

一、UNION作用 可用UNION操作符来组合数条SQL查询。 二、UNION 使用规则 1、UNION的使用很简单。所需做的只是给出每条SELECT语句&#xff0c;在各条语句之间放上关键字UNION。2、UNION必须由两条或两条以上的SELECT语句组成&#xff0c;语句之间用关键字UNION分隔&#xff…

Python绘图系统25:新增8种绘图函数

文章目录 常用绘图函数单选框的更改逻辑源代码 Python绘图系统&#xff1a; 前置源码&#xff1a; Python打造动态绘图系统&#x1f4c8;一 三维绘图系统 &#x1f4c8;二 多图绘制系统&#x1f4c8;三 坐 标 轴 定 制&#x1f4c8;四 定制绘图风格 &#x1f4c8;五 数据生成导…