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

一、表单校验

        为什么要封装自定义表单校验方法,因为在后台管理系统中,通常我们会涉及到用户的添加或则信息的修改,这时候通常就涉及表单的相关校验。但通常一个系统中的表单校验针对同一个字段来说是统一的。因此我们就需要将对应的校验字段的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.mzph.cn/news/94802.shtml

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

相关文章

STM32复习笔记(五):FSMC连接外部SRAM

目录 Preface&#xff1a; &#xff08;一&#xff09;原理相关 &#xff08;二&#xff09;CUBEMX配置 &#xff08;三&#xff09;轮询方式读写 &#xff08;四&#xff09;DMA方式读写 Preface&#xff1a; STM32F4有一个FSMC&#xff08;Flexible Static Memory Contr…

侯捷 C++ STL标准库和泛型编程 —— 9 STL周围

最后一篇&#xff0c;完结辽&#xff01;&#x1f60b; 9 STL周围 9.1 万用Hash Function Hash Function的常规写法&#xff1a;其中 hash_val 就是万用Hash Function class CustumerHash { public:size_t operator()(const Customer& c) const{ return hash_val(c.fna…

BASH shell脚本篇5——文件处理

这篇文章介绍下BASH shell中的文件处理。之前有介绍过shell的其它命令&#xff0c;请参考&#xff1a; BASH shell脚本篇1——基本命令 BASH shell脚本篇2——条件命令 BASH shell脚本篇3——字符串处理 BASH shell脚本篇4——函数 在Bash Shell脚本中&#xff0c;可以使用…

【C++】String -- 详解

⚪C语言中的字符串 C 语言中&#xff0c;字符串是以 \0 结尾的一些字符的集合&#xff0c;为了操作方便&#xff0c;C 标准库中提供了一些 str 系列的库函数&#xff0c;但是这些库函数与字符串是分离开的&#xff0c;不太符合 OOP 的思想&#xff0c;而且底层空间需要用户自己…

Is This The Intelligent Model(这是智能模型吗)

Is This The Intelligent Model 这是智能模型吗 Ruoqi Sun Academy of Military Science Defense Innovation Institute, Beijing, 100091, China E-mail: ruoqisun7163.com The exposed models are called artificial intelligent models[1-3]. These models rely on knowled…

讲讲项目里的仪表盘编辑器(二)

应用场景 正常来说&#xff0c;编辑器应用场景应该包括&#xff1a; 编辑器-预览 编辑器 最终运行时 怎么去设计 上一篇推文&#xff0c;我们已经大概了解了编辑器场景。接下来&#xff0c;我们来看预览时的设计 编辑器-预览 点击预览按钮&#xff0c;执行以…

[Unity][VR]Oculus透视开发图文教程1-Passthrough应用XR项目设置

Oculus现在已向开发者公布了如何使用自己的设备Camera,本系列课程就来手把手地告诉你如何在Unity中使用这个特性。 第一步,既然用的是Quest的特性,那就需要先引入Quest的Unity开发SDK。并且完成基本的VR开发项目设置。 新建Unity项目后,在编辑器界面先点击Window,打开资…

虹科分享 | 为工业机器人解绑,IO-Link wireless无线通讯技术可实现更加轻量灵活的机器人协作

背景 机器人是一种能够半自主或全自主工作的智能机器。中国电子学会组织发布的《中国机器人产业发展报告&#xff08;2022年&#xff09;显示&#xff0c;近些年&#xff0c;我国机器人市场规模持续快速增长&#xff0c;“机器人”应用不断拓展深入&#xff0c;预计五年年均增…

YOLOv5、YOLOv8改进:RepVGG结构

1.简介 论文参考&#xff1a;最新RepVGG结构: Paper 我们所说的“VGG式”指的是&#xff1a; 没有任何分支结构。即通常所说的plain或feed-forward架构。 仅使用3x3卷积。 仅使用ReLU作为激活函数。 主要创新点为结构重参数化。在训练时&#xff0c;网络的结构是多分支进…

Visopsys 0.92 发布

Visopsys 是一个 PC 机的操作系统&#xff0c;系统小型、快速而且开源。有着丰富的图形界面、抢先式多任务机制以及支持虚拟内存。Visopsys 视图兼容很多操作系统&#xff0c;但并不是他们的克隆版本。Visopsys 0.92 现已发布&#xff0c;此维护版本引入了多任务处理程序、文件…

二叉树题目:路径总和 II

文章目录 题目标题和出处难度题目描述要求示例数据范围 前言解法一思路和算法代码复杂度分析 解法二思路和算法代码复杂度分析 题目 标题和出处 标题&#xff1a;路径总和 II 出处&#xff1a;113. 路径总和 II 难度 4 级 题目描述 要求 给你二叉树的根结点 root \tex…

我的第一个react.js 的router工程

react.js 开发的时候&#xff0c;都是针对一个页面的&#xff0c;多个页面就要用Router了&#xff0c;本文介绍我在vscode 下的第一个router 工程。 我在学习react.js 前端开发&#xff0c;学到router 路由的时候有点犯难了。经过1-2天的努力&#xff0c;终于完成了第一个工程…

使用Pytorch构建神经网络

构建神经网络的典型流程 定义一个拥有可学习参数的神经网络遍历训练数据集处理输入数据使其流经神经网络计算损失值将网络参数的梯度进行反向传播以一定的规则更新网络的权重 我们首先定义一个Pytorch实现的神经网络: # 导入若干工具包 import torch import torch.nn as nn …

亲,您的假期余额已经严重不足了......

引言 大家好&#xff0c;我是亿元程序员&#xff0c;一位有着8年游戏行业经验的主程。 转眼八天长假已经接近尾声了&#xff0c;今天来总结一下大家的假期&#xff0c;聊一聊假期关于学习的看法&#xff0c;并预估一下大家节后大家上班时的样子。 1.放假前一天 即将迎来八天…

基于Web安全的Python编程(1)

目录 一、http协议基础知识介绍 1、http协议分类 2、请求方法 3、什么是URL 4、请求头 5、响应状态码 二、常用Python库、函数、操作 三、http常用请求方法 1、不带参请求 2、带参数请求&#xff08;get和post存在细微区别&#xff09; 四、http响应属性获取 1、获取…

计算机网络(六):应用层

参考引用 计算机网络微课堂-湖科大教书匠计算机网络&#xff08;第7版&#xff09;-谢希仁 1. 应用层概述 应用层是计算机网络体系结构的最顶层&#xff0c;是设计和建立计算机网络的最终目的&#xff0c;也是计算机网络中发展最快的部分 早期基于文本的应用 (电子邮件、远程登…

分布式架构篇

1、微服务 微服务架构风格&#xff0c;就像是把一个单独的应用程序开发为一套小服务&#xff0c;每个服务运行在自己的进程中&#xff0c;并使用轻量级机制通信&#xff0c;通常是 HTTP API。这些服务围绕业务能力来构建&#xff0c;并通过完全自动化部署机制来独立部署。这些…

Spring 原理

它是一个全面的、企业应用开发一站式的解决方案&#xff0c;贯穿表现层、业务层、持久层。但是 Spring仍然可以和其他的框架无缝整合。 1 Spring 特点 轻量级控制反转面向切面容器框架集合 2 Spring 核心组件 3 Spring 常用模块 4 Spring 主要包 5 Spring 常用注解 bean…

第十七章:Java连接数据库jdbc(java和myql数据库连接)

1.进入命令行&#xff1a;输入cmd&#xff0c;以管理员身份运行 windowsr 2.登录mysql 3.创建库和表 4.使用Java命令查询数据库操作 添加包 导入包的快捷键 选择第四个 找到包的位置 导入成功 创建java项目 二&#xff1a;连接数据库&#xff1a; 第一步&#xff1a;注册驱动…

设计模式 - 策略模式

目录 一. 前言 二. 实现 一. 前言 策略模式 (Strategy Pattern) 是指对一系列的算法定义&#xff0c;并将每一个算法封装起来&#xff0c;而且使它们还可以相互替换。此模式让算法的变化独立于使用算法的客户。 与状态模式的比较 状态模式的类图和策略模式类似&#xff0c;并…