HOW - Form 表单确认校验两种模式(以 Modal 场景为例)
目录
- 一、背景
- 二、具体
- 1. 模式一:点击确认进行校验提示
- 2. 模式二:确认按钮依赖于表单内容
- 实现说明
一、背景
基于react、antd form分别实现如下两种模式:
- 1、一个 Modal,点击确认进行校验提示
- 2、一个 Modal,确认按钮依赖于表单内容,必填项都有值才可点击
二、具体
以下是基于 React 和 Ant Design 的两种模式实现:
1. 模式一:点击确认进行校验提示
import React, { useState } from "react";
import { Modal, Form, Input, Button, message } from "antd";const DialogWithValidation = () => {const [visible, setVisible] = useState(false);const [form] = Form.useForm();const handleOk = () => {form.validateFields().then(() => {message.success("校验通过,提交成功!");setVisible(false);form.resetFields();}).catch((errorInfo) => {message.error("校验未通过,请检查输入!");});};return (<><Button type="primary" onClick={() => setVisible(true)}>打开对话框</Button><Modaltitle="模式一:校验提示"visible={visible}onCancel={() => setVisible(false)}onOk={handleOk}okText="确认"cancelText="取消"><Form form={form} layout="vertical"><Form.Itemlabel="姓名"name="name"rules={[{ required: true, message: "请输入姓名!" }]}><Input placeholder="请输入姓名" /></Form.Item><Form.Itemlabel="邮箱"name="email"rules={[{ required: true, message: "请输入邮箱!" },{ type: "email", message: "请输入有效的邮箱地址!" },]}><Input placeholder="请输入邮箱" /></Form.Item></Form></Modal></>);
};export default DialogWithValidation;
2. 模式二:确认按钮依赖于表单内容
可以参考 Antd form - 仅校验 例子。主要是利用 validateFields
的 validateOnly
动态调整提交按钮的 disabled 状态:
const SubmitButton: React.FC<React.PropsWithChildren<SubmitButtonProps>> = ({ form, children }) => {const [submittable, setSubmittable] = React.useState<boolean>(false);// Watch all valuesconst values = Form.useWatch([], form);React.useEffect(() => {form.validateFields({ validateOnly: true }).then(() => setSubmittable(true)).catch(() => setSubmittable(false));}, [form, values]);return (<Button type="primary" htmlType="submit" disabled={!submittable}>{children}</Button>);
};
也可以监听 onFieldsChange
:
import React, { useState } from "react";
import { Modal, Form, Input, Button } from "antd";const DialogWithDisableButton = () => {const [visible, setVisible] = useState(false);const [isFormValid, setIsFormValid] = useState(false);const [form] = Form.useForm();const handleFieldsChange = () => {form.validateFields().then(() => {setIsFormValid(true);}).catch(() => {setIsFormValid(false);});};const handleOk = () => {Modal.success({title: "提交成功",content: "所有必填项都已填写!",});setVisible(false);form.resetFields();setIsFormValid(false);};return (<><Button type="primary" onClick={() => setVisible(true)}>打开对话框</Button><Modaltitle="模式二:按钮依赖表单"visible={visible}onCancel={() => setVisible(false)}onOk={handleOk}okButtonProps={{ disabled: !isFormValid }}okText="确认"cancelText="取消"><Formform={form}layout="vertical"onFieldsChange={handleFieldsChange}><Form.Itemlabel="姓名"name="name"rules={[{ required: true, message: "请输入姓名!" }]}><Input placeholder="请输入姓名" /></Form.Item><Form.Itemlabel="邮箱"name="email"rules={[{ required: true, message: "请输入邮箱!" },{ type: "email", message: "请输入有效的邮箱地址!" },]}><Input placeholder="请输入邮箱" /></Form.Item></Form></Modal></>);
};export default DialogWithDisableButton;
实现说明
-
模式一:
- 点击“确认”后会触发校验逻辑。
- 校验通过后显示成功提示,否则提示错误信息。
-
模式二:
- 使用
onFieldsChange
方法监听表单变化。 - 如果所有必填项都有值且校验通过,启用“确认”按钮;否则按钮保持禁用状态。
- 使用
相关文章:
![](https://www.ngui.cc/images/no-images.jpg)
HOW - Form 表单确认校验两种模式(以 Modal 场景为例)
目录 一、背景二、具体1. 模式一:点击确认进行校验提示2. 模式二:确认按钮依赖于表单内容实现说明 一、背景 基于react、antd form分别实现如下两种模式: 1、一个 Modal,点击确认进行校验提示2、一个 Modal,确认按钮…...
![](https://i-blog.csdnimg.cn/direct/c0ddb912155f4879bb65d30e9576c808.png)
LabVIEW部署Web服务
目录 LabVIEW部署Web服务1、创建项目2、创建Web服务3、新建WebVI3.1、使用GET方法3.2、使用POST方法 4、 部署和对应URL4.1、应用程序:80804.2、本地调试:80094.3、NI Web服务器:9090(禁用) 5、测试5.1、测试GET方法5.2、测试POST方法 6、实际…...
![](https://i-blog.csdnimg.cn/direct/3c2ab220a9114f0295142e6b8e3cd3c4.png)
进程件通信——网络通信——TCP
网络抓包工具:wireshark 抓取经过设备网卡的数据。 操作: 1. sudo wireshark 2. 选择要抓取的网卡----》any 3. 设置抓取的过滤条件 4. 进行网络通信 5. 分析数据 UDP: 用户数据报协议 UDP: 用户数据报协议 特点ÿ…...
![](https://i-blog.csdnimg.cn/img_convert/5c68d2ea14cb574b782f1d69872bbc3a.png)
【数据库】三、SQL语言
文章目录 三、SQL语言1 概述2 数据定义(DDL)2.1 定义数据库2.2 定义基本表2.3 修改基本表2.4 删除基本表 3 数据操作(DML)3.1 数据查询3.1.1 单表查询3.1.2 连接查询3.1.3 嵌套查询3.1.4 集合查询 3.2 数据更新3.2.1 插入数据3.2.2 修改数据3.2.3 删除数据 4 数据控制(DCL)5 视…...
![](https://www.ngui.cc/images/no-images.jpg)
Python对象的序列化和反序列化工具:Joblib与Pickle
在Python中,序列化是将内存中的对象转换为可存储或传输的格式的过程。常见的序列化格式有JSON、YAML、Pickle和Joblib等。其中,Pickle和Joblib是最常用的用于序列化和反序列化Python对象的工具。虽然这两者有很多相似之处,但它们在某些方面有…...
![](https://www.ngui.cc/images/no-images.jpg)
Spring Boot3 配合ProxySQL实现对 MySQL 主从同步的读写分离和负载均衡
将 ProxySQL 配合 Spring Boot 使用,主要的目的是在 Spring Boot 应用程序中实现对 MySQL 主从同步的读写分离和负载均衡。这样,你可以利用 ProxySQL 自动将写操作路由到主库,而将读操作路由到从库。 1. 准备工作 确保你的 MySQL 主从同步环…...
![](https://img-blog.csdnimg.cn/img_convert/afd69b45eb77d0f51a9fc67a011f5312.jpeg)
量子计算遇上人工智能:突破算力瓶颈的关键?
引言:量子计算遇上人工智能——突破算力瓶颈的关键? 在数字化时代的浪潮中,人工智能(AI)正以前所未有的速度改变着我们的生活,从语音助手到自动驾驶,从医学诊断到金融分析,无不彰显其…...
![](https://i-blog.csdnimg.cn/direct/9f1b2f02ab724c0387dfc67a9f32c711.png)
【Unity插件】解决移动端UI安全区问题 - Safe Area Helper
在移动端设计界面时,必须要考虑的就是UI的安全区。 Unity本身也提供了Safearea的API。 但在asset store时已经有人提供了免费的插件(Safe Area Helper),我们可以直接使用。 插件链接: https://assetstore.unity.com/p…...
![](https://www.ngui.cc/images/no-images.jpg)
JSON.stringify 实现深度克隆的缺陷
在前端开发中,深克隆(Deep Clone)和浅克隆(Shallow Clone)是常见的操作。浅克隆和深克隆的区别主要体现在对象内部嵌套对象的处理方式上。 1. 浅克隆(Shallow Clone) 浅克隆是指创建一个新对象…...
![](https://i-blog.csdnimg.cn/direct/02b6673fa6a04f47861e77be53f77d80.png)
深度解析如何使用Linux中的git操作
1.如何理解版本控制 →Git&&gitee||github 多版本控制面对善变的甲方 版本控制是一种用于管理文件或代码变更的系统,帮助团队或个人追踪项目的历史记录,并支持多方协作开发。它在软件开发和文档管理中尤为重要,但也适用于其他需要追…...
![](https://i-blog.csdnimg.cn/direct/2681db1202d342d79bb28d8ca2468ccf.png)
el-table 合并单元格
参考文章:vue3.0 el-table 动态合并单元格 - flyComeOn - 博客园 <el-table :data"tableData" border empty-text"暂无数据" :header-cell-style"{ background: #f5f7fa }" class"parent-table" :span-method"obj…...
![](https://www.ngui.cc/images/no-images.jpg)
Redis 三大问题:缓存穿透、缓存击穿、缓存雪崩
Redis 作为高性能的内存数据库,广泛应用于缓存场景。然而,在实际使用中,可能会遇到三大经典问题:缓存穿透、缓存击穿 和 缓存雪崩。这些问题如果不加以解决,可能会导致系统性能下降甚至崩溃。 1. 缓存穿透 问题描述 …...
![](https://www.ngui.cc/images/no-images.jpg)
常用字符串处理函数
常用字符串处理函数 strcspn函数原型参数说明返回值使用示例注意事项 strpbrk函数原型参数说明返回值使用示例 strcasecmp函数原型参数说明返回值使用示例注意事项 strcspn strcspn 是一个 C 和 C 标准库函数,用于计算一个字符串中不包含任何指定字符的最长前缀的长…...
![](https://i-blog.csdnimg.cn/img_convert/d4650b69e387ef1c51998b8d2dd446f7.png)
Pathview包:整合表达谱数据可视化KEGG通路
Pathview是一个用于整合表达谱数据并用于可视化KEGG通路的一个R包,其会先下载KEGG官网上的通路图,然后整合输入数据对通路图进行再次渲染,从而对KEGG通路图进行一定程度上的个性化处理,并且丰富其信息展示。(KEGG在线数…...
![](https://www.ngui.cc/images/no-images.jpg)
seleniun 自动化程序,python编程 我监控 chrome debug数据后 ,怎么获取控制台的信息呢
python 好的,使用 Python 来监控 Chrome 的调试数据并获取控制台信息,可以使用 websocket-client 库来连接 Chrome 的 WebSocket 接口。以下是一个详细的示例: 1. 安装必要的库 首先,你需要安装 websocket-client 库。可以使用…...
![](https://www.ngui.cc/images/no-images.jpg)
SQL中的数据库对象
视图:VIEW 概念 ① 虚拟表,本身不存储数据,可以看做是存储起来的SELECT语句 ② 视图中SELECT语句中涉及到的表,称为基表 ③ 针对视图做DML操作,对影响到基表中的数据,反之亦然 ④ 创建、删除视图本身&#…...
![](https://i-blog.csdnimg.cn/img_convert/1efcdad20f05490efc8a61d8916240ac.png)
DeepSeek:性能强劲的开源模型
deepseek 全新系列模型 DeepSeek-V3 首个版本上线并同步开源。登录官网 chat.deepseek.com 即可与最新版 V3 模型对话。 性能对齐海外领军闭源模型 DeepSeek-V3 为自研 MoE 模型,671B 参数,激活 37B,在 14.8T token 上进行了预训练。 论…...
![](https://i-blog.csdnimg.cn/img_convert/51fec787657dfcdd08333f8a596ba6e3.jpeg)
医疗可视化大屏 UI 设计新风向
智能化交互 借助人工智能与机器学习技术,实现更智能的交互功能。如通过语音指令或手势控制来操作大屏,医护人员无需手动输入,可更便捷地获取和处理信息。同时,系统能根据用户的操作习惯和数据分析,自动推荐相关的医疗…...
![](https://www.ngui.cc/images/no-images.jpg)
从企业级 RAG 到 AI Assistant , Elasticsearch AI 搜索技术实践
文章目录 01 AI 搜索落地的挑战02 Elasticsearch 向量性能 5 倍提升03 Elasticsearch 企业版 AI 能力全面解读04 阿里云 Elasticsearch 将准确率提升至 95%05 AI Assistant 集成通义千问大模型实现 AI Ops01 AI 搜索落地的挑战 在过去一年中,基座大模型技术的快速迭代推动了 …...
![](https://www.ngui.cc/images/no-images.jpg)
TypeScript语言的并发编程
TypeScript语言的并发编程 引言 随着现代应用程序的复杂性不断增加,性能和用户体验的重要性显得尤为突出。在这种背景下,并发编程应运而生,成为提升应用程序效率的重要手段。在JavaScript及其超集TypeScript中,尽管语言本身是单…...
![](https://i-blog.csdnimg.cn/direct/33a6b71ce4744674875cd5b85787191b.png)
benchANT 性能榜单技术解读 Part 1:写入吞吐
近期,国际权威数据库性能测试榜单 benchANT 更新了 Time Series: Devops(时序数据库)场景排名,KaiwuDB 数据库在 xsmall 和 small 两类规格下的时序数据写入吞吐、查询吞吐、查询延迟、成本效益等多项指标刷新榜单原有数据纪录。在…...
![](https://www.ngui.cc/images/no-images.jpg)
虚拟机防火墙管理
虚拟机防火墙管理 在网络防护方面,PVE提供了相当良好的防火墙管理功能,并且可以适用于节点实体机、客体机、让客体机内不需要另外再安装软体防火墙,对于效能与统一管理大有助益,管理者可以方便一次管理所有的防火墙规则࿰…...
![](https://i-blog.csdnimg.cn/direct/2665d77c25504269b23b89d1610620f9.png)
Nginx反向代理请求头有下划线_导致丢失问题处理
后端发来消息说前端已经发了但是后端没收到请求。 发现是下划线的都没收到,搜索之后发现nginx默认request的header中包含’_’时,会自动忽略掉。 解决方法是:在nginx里的nginx.conf配置文件中的http部分中添加如下配置: unders…...
![](https://i-blog.csdnimg.cn/blog_migrate/ed0afaffabc28cc474988b643d811f4e.png)
【STM32+CubeMX】 新建一个工程(STM32F407)
相关文章: 【HAL库】 STM32CubeMX 教程 1 --- 下载、安装 目录 第一部分、新建工程 第二部分、工程文件解释 第三部分、编译验证工程 友情约定:本系列的前五篇,为了方便新手玩家熟悉CubeMX、Keil的使用,会详细地截图每一步Cu…...
![](https://i-blog.csdnimg.cn/img_convert/277550ed4d31bb08365854aaa85264ba.png)
机器人避障不再“智障”:HEIGHT——拥挤复杂环境下机器人导航的新架构
导读: 由于环境中静态障碍物和动态障碍物的约束,机器人在密集且交互复杂的人群中导航,往往面临碰撞与延迟等安全与效率问题。举个简单的例子,商城和车站中的送餐机器人往往在人流量较大时就会停在原地无法运作,因为它不…...
![](https://i-blog.csdnimg.cn/direct/359b7058dc054f26b382684e41d66886.png)
H2数据库在单元测试中的应用
H2数据库特征 用比较简洁的话来介绍h2数据库,就是一款轻量级的内存数据库,支持标准的SQL语法和JDBC API,工业领域中,一般会使用h2来进行单元测试。 这里贴一下h2数据库的主要特征 Very fast database engineOpen sourceWritten…...
![](https://i-blog.csdnimg.cn/direct/6c7cdd4a03d648ec95b6151ad2583d0f.png)
部署HugeGraph
部署HugeGraph 这里以hugegraph1.2.0为例子,演示一下如何安装部署hugegraph 一、下载并安装JDK11 下载JDK11 https://www.oracle.com/java/technologies/downloads/#java11 使用scp命令将安装包上传到服务器 scp /path/to/local/file usernameserver_ip:/path/…...
![](https://www.ngui.cc/images/no-images.jpg)
2025年第三届“华数杯”国际赛A题解题思路与代码(Matlab版)
游泳竞技策略优化模型代码详解(MATLAB版) 第一题:速度优化模型 本部分使用MATLAB实现游泳运动员在不同距离比赛中的速度分配策略优化。 1. 模型概述 模型包含三个主要文件: speed_optimization.m: 核心优化类plot_speeds.m: …...
![](https://www.ngui.cc/images/no-images.jpg)
嵌入式基础 -- IMX8MP的 GPC 模块技术
General Power Controller (GPC) 模块技术文档 1. GPC 模块简介 1.1 模块功能 GPC(General Power Controller)模块是用于 i.MX8M Plus 应用处理器 的电源管理组件,支持以下功能: 管理 ARM Cortex-A53 和 Cortex-M7 平台的低功…...
![](https://i-blog.csdnimg.cn/direct/316a26a5e9e24c0bb4300f94915073d8.png)
选择器css
1.a标签选择 // 选中所具有herf 的元素 [herf] {color: skyblue; } // 选中所具有herfhttps://fanyi.youdao.com/ 的元素 [herf$"youdao.com"] {color:pink; } // 按此顺序书写 link visited hover active // 未访问状态 a:link {color:orange } // 访问状态 a…...
![](/images/no-images.jpg)
韩国做美食的视频网站/深圳seo优化推广
排序需要得到的结果按字母顺序。a-----z...import java.util.*; /*** 大小写字母的排序* author Administrator**/ public class z {//上边是按大写在后的进行排序static Map<Character,Float> mapnew HashMap<Character,Float>();//hashMap允许null值//按大写在前…...
![](/images/no-images.jpg)
其它类型的定制营销型网站/成都关键词seo推广平台
1、http://gutou9.iteye.com/blog/281776 2、http://www.iteye.com/topic/480432...
![](https://img-blog.csdnimg.cn/img_convert/c094be79e905105f917128bd5b9a2318.png)
辽宁世纪兴电子商务服务中心/seo门户网站建设方案
在实现页面五花八门的有特色的ui时,我们有时会遇到要用实现一个弧形,而这样的弧形要怎么实现呢?用图片?好像不大现实,因为这样就要无故多加载一张图片了,这里我们来说说怎么用css的after伪类来实现弧形。先…...
![](/images/no-images.jpg)
网站建设想法/百度收录情况查询
前二十年为自己, 中间二十年为父母, 后面二十年为子女, 还有的话就不知道为谁了。转载于:https://www.cnblogs.com/xiaohaokof/archive/2010/09/23/1833425.html...
![](/images/no-images.jpg)
做女装的网站/怎么进行网络推广
[Mnsx_x]刷题笔记——顶端迭代器 请你设计一个迭代器,除了支持 hasNext 和 next 操作外,还支持 peek 操作。 实现 PeekingIterator 类: PeekingIterator(int[] nums) 使用指定整数数组 nums 初始化迭代器。 int next() 返回数组中的下一个元素…...
![](https://www.oschina.net/img/hot3.png)
专业网站优化公司报价/要怎么网络做推广
2019独角兽企业重金招聘Python工程师标准>>> python 移动文件 利用python写一些简单的脚本整理程序,为生活服务是一个目标 这个程序就是为了移动指定文件下的指定类型的文件到目标文件下 # -*- coding: utf-8 -*-import os import sys import shutilprin…...