当前位置: 首页 > news >正文

react antd实现upload上传文件前form校验,同时请求带data

最近的需求,两个下拉框是必填项,点击上传按钮,如果有下拉框没选要有提示,如图

如果直接使用antd的Upload组件,一点击文件选择的窗口就打开了,哪怕在Button里再加点击事件,也只是(几乎)同时处理两个方法,beforeUpload更是不行,文件都选择完了才执行。

在网上查找,终于看到这位vue选手的一个思路,两个同位置同样式的按钮按某个state切换:

AntD框架上传文件前校验信息:选择文件前进行内容校验并提示

改成react写法,把除了文件以外的payload获取放到beforeUpload里

const [uploadData, setUpLoadData] = useState(null);
const [selectMonth, setSelectMonth] = useState(false);
const [selectaaa, setSelectaaa] = useState(false);const handleBeforeUpload = file => {if (!/.xls?$/.test(file.name) && !/.xlsx?$/.test(file.name)) {message.error('...');return false;}form.validateFields((err, fieldsValue) => {if (err) return;const month = moment(fieldsValue.month).format('YYYY-MM');setUpLoadData({...fieldsValue, month: month});});return true;
};

组件里加onChange监听:

<FormItem label="月份" {...formItemLayout}>  {getFieldDecorator('month', {rules: [{ required: true, message: '请选择月份' }],})(<MonthPicker onChange={value => value ? setSelectMonth(true) : setSelectMonth(false)}/>)}
</FormItem>

最后上传按钮那边做两个按钮,用最上面定义的两个state来确定展示哪个按钮(validate里调用form.validateFields方法做必填提示):

{selectDepartment && selectMonth ? (<Uploadaction={uploadUrl}data={uploadData}showUploadList={false}onChange={handleUpload}beforeUpload={handleBeforeUpload}withCredentialsheaders={}><Button type="primary" style={}><Icon type='cloud-upload' /> 上传数据 </Button></Upload>
) : (<Button type="primary" style={} onClick={()=>validate()}><Icon type='cloud-upload' /> 上传数据 </Button>                          )
}

就可以做到最开始提到的效果啦。

又看到一篇文章(https://zhuanlan.zhihu.com/p/590018131?utm_id=0),可以更优雅地监听form,不用再使用onChange方法和useState,改完发现自己项目antd版本太低了用不了,从antd@4.20.0 开始,antd Form 添加了一个新的 API ->Form.useWatch

const [form] = Form.useForm();
const aaa = Form.useWatch('aaa', form);
const month = Form.useWatch('month', form);

在form item标签里加上name属性:

<FormItem label="月份" {...formItemLayout} name='month'>

效果应该是一样的。

另外发现使用dataform格式post方法上传文件,其他数据参数不需要用new FormData()再append进去了,直接传字典就行。

相关文章:

react antd实现upload上传文件前form校验,同时请求带data

最近的需求&#xff0c;两个下拉框是必填项&#xff0c;点击上传按钮&#xff0c;如果有下拉框没选要有提示&#xff0c;如图 如果直接使用antd的Upload组件&#xff0c;一点击文件选择的窗口就打开了&#xff0c;哪怕在Button里再加点击事件&#xff0c;也只是&#xff08;几乎…...

echars 设置滚动条演示,

dataZoom: [// 滑动条{zoomLock:true,xAxisIndex: 0, // 这里是从X轴的0刻度开始type: "slider", // 这个 dataZoom 组件是 slider 型 dataZoom 组件startValue: 0, // 从头开始。endValue: 20, // 一次性展示几个。// fillerColor: "#023661", // 选中范围…...

代码随想录算法训练营第五十八天|583.两个字符串的删除操作 、72. 编辑距离

代码随想录算法训练营第五十八天|583.两个字符串的删除操作 、72. 编辑距离 文章目录 代码随想录算法训练营第五十八天|583.两个字符串的删除操作 、72. 编辑距离[toc]583.两个字符串的删除操作求公共部分长度&#xff1a;即最长公共子串 72. 编辑距离 583.两个字符串的删除操作…...

1024网络技术命令汇总(第54课)

1024网络技术命令汇总(第54课) 1 查询命令 display ? display current-configuration //查看全部的配置信息 display interface brief //查看接口的信 display ip interface brief //查看IP地址的接口信息状态 display arp all …...

智慧河湖方案:AI赋能水利水务,构建河湖智能可视化监管大数据平台

一、方案背景 我国江河湖泊众多&#xff0c;水系发达。伴随着经济社会快速发展&#xff0c;水生态水环境问题成为群众最关注的民生议题之一。一些河流开发利用已接近甚至超出水环境承载能力&#xff0c;一些地区废污水排放量居高不下&#xff0c;一些地方侵占河道、围垦湖泊等…...

界面组件DevExpress WPF v23.1 - 全面升级文档处理功能

DevExpress WPF拥有120个控件和库&#xff0c;将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序&#xff0c;这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 无论是Office办公软件…...

【C语言必知必会 | 第八篇】一文带你精通循环结构

引言 C语言是一门面向过程的、抽象化的通用程序设计语言&#xff0c;广泛应用于底层开发。它在编程语言中具有举足轻重的地位。 此文为【C语言必知必会】系列第八篇&#xff0c;进行C语言循环结构的专项练习&#xff0c;结合专题优质题目&#xff0c;带领读者从0开始&#xff0…...

同一个线程池执行不同类型的任务

1、同一个线程池可以执行不同的任务类型&#xff0c;也可以带返回值&#xff0c;也可以不带返回值的 import com.google.common.util.concurrent.ThreadFactoryBuilder; import com.vip.vman.result.BasicResult; import lombok.extern.slf4j.Slf4j; import org.springframewor…...

GEO生信数据挖掘(八)富集分析(GO 、KEGG、 GSEA 打包带走)

第六节&#xff0c;我们使用结核病基因数据&#xff0c;做了一个数据预处理的实操案例。例子中结核类型&#xff0c;包括结核&#xff0c;潜隐进展&#xff0c;对照和潜隐&#xff0c;四个类别。第七节延续上个数据&#xff0c;进行了差异分析。 本节对差异基因进行富集分析。 …...

高校教务系统登录页面JS分析——华南理工大学

高校教务系统密码加密逻辑及JS逆向 本文将介绍高校教务系统的密码加密逻辑以及使用JavaScript进行逆向分析的过程。通过本文&#xff0c;你将了解到密码加密的基本概念、常用加密算法以及如何通过逆向分析来破解密码。 本文仅供交流学习&#xff0c;勿用于非法用途。 一、密码加…...

人工智能之PyTorch数据操作-Python版

PyTorch数据操作 # 导入PyTorch import torch [张量表示一个由数值组成的数组&#xff0c;这个数组可能有多个维度]。 具有一个轴的张量对应数学上的向量&#xff08;&#xff09;&#xff1b; 具有两个轴的张量对应数学上的矩阵&#xff08;matrix&#xff09;&#xff1b;…...

星环科技向量数据库Transwarp Hippo1.1发布:一库搞定向量+全文联合检索,提升大模型准确率

星环科技向量数据库Transwarp Hippo自发布已来,受到了众多用户的欢迎,帮助用户实现向量数据的存储、管理和检索,探索和实践大模型场景。在与用户不断地深入交流以及实践中,Hippo迎来了V1.1版本,一套系统即可支持向量与全文联合检索,提高文本数据的召回精度,从而提升大语…...

理解LoadRunner,基于此工具进行后端性能测试的详细过程(下)

5、录制并增强虚拟用户脚本 从整体角度看&#xff0c;用LoadRunner 开发虚拟用户脚本主要包括下面四步骤&#xff1a; 识别测试应用使用的协议 录制脚本 完善录制得到的脚本 验证脚本的正确性 识别被测应用使用的协议 如果明确知道了被测系统所采用的协议&#xff0c;可…...

K8s上的监控系统(Grafana)使用和理解说明

Grafana (集成Prometheus On K8s集成)主要步骤说明 客户端指标收集 —— K8s 集群资源等 —— Prometheus 监控数据收集 —— Grafana —— 通过PromQL 进行数据查询 —— 预警告警等通知 Kubernetes集群资源&#xff1a;这包括了CPU、内存、磁盘、网络等各种类型的资源。这些资…...

【netty从入门到放弃】netty转发tcp数据到多客户端

目录 创建数据库表xml实体类启动类线程类客户端代码handlecontroller类缓存tcp链接 接到一个需求&#xff0c;需要实现转发通讯模块tcp数据其他的服务器&#xff0c;也就是转发tcp数据到多客户端 任务拆解: 首先需要建立多客户端&#xff0c;每个客户端有一个独立的clientId和…...

Linux | gdb的基本使用

目录 前言 一、调试文件的生成 二、调试指令 1、选择调试文件 2、查看代码 3、运行代码 4、断点 5、打印与常显示 6、其他 总结 前言 前面我们学习了如何使用gcc/g来进行对代码进行编译&#xff0c;本章我们将使用gdb来对代码进行调试&#xff0c;学习本章的前提是有…...

C++之this指针

前言 C中对象模型和this指针是面向对象编程中的重要概念。对象模型描述了对象在内存中的布局和行为&#xff0c;包括成员变量、成员函数的存储方式和访问权限。this指针是一个隐含的指针&#xff0c;指向当前对象的地址&#xff0c;用于在成员函数中引用当前对象的成员变量和成…...

大模型,重构自动驾驶

文&#xff5c;刘俊宏 编&#xff5c;王一粟 大模型如何重构自动驾驶&#xff1f;答案已经逐渐露出水面。 “在大数据、大模型为特征&#xff0c;以数据驱动为开发模式的自动驾驶3.0时代&#xff0c;自动驾驶大模型将在车端、云端上实现一个统一的端到端的平台管理。”毫末智…...

Jmeter执行接口自动化测试-如何初始化清空旧数据

需求分析&#xff1a; 每次执行完自动化测试&#xff0c;我们不会执行删除接口把数据删除&#xff0c;而需要留着手工测试&#xff0c;此时会导致下次执行测试有旧数据我们手工可能也会新增数据&#xff0c;导致下次执行自动化测试有旧数据 下面介绍两种清空数据的方法 一、通过…...

dashboard报错 错误:无法获取网络列表、dashboard报错 错误:无法获取云主机列表 解决流程

文章目录 错误说明dashboard上报错底层命令报错查看日志message日志httpd报错日志错误日志分析开始解决测试底层命令dashboard错误说明 dashboard上报错 首先,dashboard上无论是管理员还是其他项目,均无法获取云主机和网络信息,具体报错如下...

神经网络模型容量控制:节点数与层数优化指南

1. 神经网络模型容量控制的核心逻辑在深度学习实践中&#xff0c;模型容量&#xff08;Model Capacity&#xff09;直接决定了神经网络的学习能力和泛化表现。就像给不同体型的人挑选衣服——太紧会限制行动&#xff08;欠拟合&#xff09;&#xff0c;太松又显得臃肿&#xff…...

GEEKOM GT1 Mega迷你主机Ubuntu 24.10性能评测

1. GEEKOM GT1 Mega迷你主机深度评测&#xff1a;Ubuntu 24.10下的Intel Core Ultra 9 185H体验 作为一名长期关注迷你主机的技术爱好者&#xff0c;最近我有机会对搭载Intel Core Ultra 9 185H处理器的GEEKOM GT1 Mega进行了全面测试。这款迷你主机在Windows 11 Pro环境下表现…...

ARM DSP加速指令SMLSLD与SMMLA深度解析

1. ARM指令集与嵌入式DSP加速指令概述在嵌入式系统开发领域&#xff0c;ARM架构凭借其精简指令集(RISC)设计理念&#xff0c;长期占据着移动设备和物联网终端的核心地位。作为一位长期从事ARM架构开发的工程师&#xff0c;我发现其指令集设计中特别值得称道的是那些为数字信号处…...

为什么你的低代码应用在MCP 2026沙箱环境总报“ContextNotBound”错误?(附官方未公开的调试模式启用密钥)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;ContextNotBound错误的本质与MCP 2026沙箱的上下文生命周期模型 错误根源解析 ContextNotBound 是 MCP 2026 沙箱运行时的核心异常之一&#xff0c;表明当前执行线程试图访问一个尚未被显式绑定&#…...

解锁学术新秘籍:书匠策AI,期刊论文的“智慧引擎”

在学术探索的征途中&#xff0c;期刊论文无疑是每位研究者展示智慧结晶、推动学科进步的重要舞台。然而&#xff0c;面对繁琐的写作流程、海量的文献筛选以及严谨的格式要求&#xff0c;许多学者常常感到力不从心。别怕&#xff0c;今天就让我们一起走进书匠策AI的世界&#xf…...

3个简单步骤,用wxauto实现微信自动化:告别重复操作,解放你的双手

3个简单步骤&#xff0c;用wxauto实现微信自动化&#xff1a;告别重复操作&#xff0c;解放你的双手 【免费下载链接】wxauto Windows版本微信客户端&#xff08;非网页版&#xff09;自动化&#xff0c;可实现简单的发送、接收微信消息&#xff0c;简单微信机器人 项目地址:…...

万象熔炉 | Anything XL效果对比:原生SDXL vs Anything XL二次元专项优化

万象熔炉 | Anything XL效果对比&#xff1a;原生SDXL vs Anything XL二次元专项优化 1. 项目简介 万象熔炉 | Anything XL 是一款基于 Stable Diffusion XL&#xff08;SDXL&#xff09;框架开发的本地图像生成工具&#xff0c;专门针对二次元和通用风格图像生成进行了深度优…...

掌握AutoDock-Vina分子对接:从配置优化到批量处理的高效解决方案

掌握AutoDock-Vina分子对接&#xff1a;从配置优化到批量处理的高效解决方案 【免费下载链接】AutoDock-Vina AutoDock Vina 项目地址: https://gitcode.com/gh_mirrors/au/AutoDock-Vina AutoDock-Vina作为计算化学和药物发现领域最广泛使用的开源分子对接引擎之一&…...

从电影《电力之战》到真实技术史:聊聊爱迪生、特斯拉与西屋电气的商业与技术博弈

电流战争背后的商业智慧&#xff1a;爱迪生、特斯拉与西屋电气的世纪博弈 1882年9月4日下午3点&#xff0c;托马斯爱迪生在纽约珍珠街发电站推上了电闸&#xff0c;400盏白炽灯瞬间点亮了曼哈顿下城的金融区。这个被后世称为"曼哈顿奇迹"的时刻&#xff0c;标志着电力…...

BlockTheSpot:3分钟实现Spotify无广告畅听的完整解决方案

BlockTheSpot&#xff1a;3分钟实现Spotify无广告畅听的完整解决方案 【免费下载链接】BlockTheSpot Video, audio & banner adblock/skip for Spotify 项目地址: https://gitcode.com/gh_mirrors/bl/BlockTheSpot BlockTheSpot是一款专为Windows平台设计的开源Spot…...