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

news2024/11/17 17:30:38

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

如果直接使用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 ? (
	<Upload
	action={uploadUrl}
	data={uploadData}
	showUploadList={false}
	onChange={handleUpload}
	beforeUpload={handleBeforeUpload}
	withCredentials
	headers={}
	>
		<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进去了,直接传字典就行。

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

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

相关文章

AutoCAD 2022 for Mac/Windows升级您的设计工具,提升工作效率

Autodesk AutoCAD 2022 是设计行业最流行的计算机辅助设计 (CAD) 软件之一。这款软件由Autodesk公司开发&#xff0c;它提供了强大的功能&#xff0c;从基本的设计和修改工具&#xff0c;到复杂的3D建模和渲染&#xff0c;一切尽在掌握。通过其直观的用户界面和不断更新的功能&…

mmDetection3D避坑指南

1 运行test.py报CUDA类错误 包括API之类的错误&#xff0c;是因为KITTI数据集有损坏&#xff0c;需要重新导入完整KITTI官方数据集,再根据官方步骤用create_data.py处理

memcpy内存拷贝函数

目录 一、memcpy内存拷贝函数 注意事项 二、memcpy与strcpy对比 三、模拟实现memcpy函数 四、memcpy函数不能进行两块存在内存重叠的空间的内存拷贝 五、改进my_memcpy函数 一、memcpy内存拷贝函数 头文件&#xff1a;string.h 函数原型&#xff1a;void* memcpy(void* …

Acwing 3306.装珠饰(十一届蓝桥java/py组J题)--dp之分组背包(hard)

分析&#xff1a; 6件装备作为一个整体去看待&#xff01;&#xff01;&#xff01;加的效果是看总的装备数目 分组背包的一个特点&#xff1a;每一个组里面只能取出一个物品&#xff0c;这里是把抽象成不同的方案数(有点多重背包的二进制处理方法的感觉。) 代码实现&#xff1…

ubuntu 20.04 passwd 指令不能使用

Linux 更改用户密码报Changing password for user 用户名. passwd: Module is unknown或更改新增用户密码passwd&#xff1a;未知的用户名 报错信息如下&#xff1a; 解决方法&#xff1a; 可以排查 /etc/pam.d/passwd配置文件 注释掉包含pam_passwdqc.so模块的行&#xff0c…

微信小程序之自定义组件(OA项目个人主页及投票)

前言 本期为大家带来微信小程序自定义组件及OA项目的个人主页布局和投票 一.自定义组件 1.学习官网 自定义组件 / 介绍 (qq.com) 2.如何自定义组件 2.1 创建目录 在根目录下依次创建components/tabs&#xff0c;然后在tabs中新建Component 创建好后会自动为我们生成对应的文…

微软Azure OpenAI支持数据微调啦!可打造专属ChatGPT

10月17日&#xff0c;微软在官网宣布&#xff0c;现在可以在Azure OpenAI公共预览版中对GPT-3.5-Turbo、Babbage-002 和Davinci-002模型进行数据微调。 使得开发人员通过自己的数据集&#xff0c;便能打造独一无二的ChatGPT。例如&#xff0c;通过海量医疗数据进行微调&#x…

零基础搭建个人网站详细流程

最近两天&#xff0c;为了给自己的工具类APP备案&#xff0c;买了阿里云ECS和域名。虽然很想说离线工具APP不用联网&#xff0c;但是现实就很无语。言归正传&#xff0c;既然买了总不能将它们闲置着&#xff0c;就诞生了建站的想法&#xff0c;至少还能放个用户协议和隐私协议。…

潮玩宇宙:收藏、交流与竞技的数字乐园

最近爆火的新项目潮玩宇宙&#xff0c;想必有很多人入场了&#xff0c;代理商宣传投资147一个月回本&#xff0c;确实是现在做到了&#xff0c;现在平台一颗宝石的价格已经超过美金了&#xff0c;还有一大部分人在等待进场&#xff0c;潮玩宇宙旗下奖券世界和养猪农场已经做了有…

学习编程语言需要熟悉库函数吗?

学习编程语言需要熟悉库函数吗? 我想答案肯定是需要的。 但不是盲目的挨个去记&#xff0c;几乎各个语言的库函数都极为丰富&#xff0c;逐个记忆的话是十分劝退的&#xff0c;而且也不可能全部熟悉&#xff0c;到用的时候该忘还是忘。最近很多小伙伴找我&#xff0c;说想要一…

Python数据分析实战-使用replace方法精确匹配替换某列的值(附源码和实现效果)

实现功能 将DataFrame中某一列的指定的两个值分别替换为0和1&#xff0c;而将其他值替换为2 实现代码 import pandas as pd# 创建一个示例DataFrame data {A: [1, 2, 3, 4, 5],B: [a, b, c, d, e]} df pd.DataFrame(data)# 打印替换前的DataFrame print("替换前的Dat…

[游戏开发][Unity] ScriptableObject数据创建与各种加载方式

前言 ScriptableObject支持把类对象数据序列化成Unity asset文件&#xff0c;同时支持反序列化成类对象。本文章通过两个案例讲解ScriptableObject的使用方式&#xff0c;第一个是简单案例&#xff0c;序列化简单的bool值和Sting数据。第二个是复杂案例&#xff0c;在类对象里嵌…

2.IDEA的安装使用指南

学习Java的第二步应该是从IDEA下手&#xff0c;这篇博文介绍了它的安装及使用&#xff0c;希望大家看完后可以独立安装 ~ 文章目录 一、下载安装包二、安装 IDEA三、IDEA 初步上手 一、下载安装包 安装包可以从官网下载&#xff0c;也可以直接私信我拿取。这里主要介绍如何在官…

了解远程连接工具

什么是远程连接 远程连接就是在远程连接另外一台计算机。当某台计算机开启了远程桌面连接功能后我们就可以在网络的另一端控制这台计算机了&#xff0c;通过远程桌面功能我们可以实时的操作这台计算机&#xff0c;在上面安装软件&#xff0c;运行程序&#xff0c;所有的一切都…

TOPDON获评2023年度“汽车后市场科技创新企业”,研发实力被认可

近期&#xff0c;由《环球时报》社、中国企业网主办的2023(第六届)中国经济大会在北京召开&#xff0c;本次大会以“迈向高质量&#xff0c;问道新发展”为主题&#xff0c;政商产学研嘉宾同襄盛会&#xff0c;交流发展理念&#xff0c;分享创新经验&#xff0c;为推动产业变革…

最佳买股票的时机------题解报告

题目&#xff1a; 暴力双循环会时间超限 一次循环&#xff0c;不断更新min和sum值 时间复杂度为O(n),空间复杂度为O(1) 写完之后看了一眼题解&#xff0c;发现没有更好的方法 public int maxProfit(int[] prices) {int sum 0,minprices[0];for(int i1;i <prices.length;i…

在Kubernetes(k8s)上部署整个SpringCloud微服务应用

文章目录 项目准备打成使用Docker打成镜像准备Docker仓库打包项目为Docker镜像 部署应用到k8s创建nfs挂载目录创建一些基本资源创建命名空间创建拉取镜像的secret创建java运行环境的profile 部署mysql创建持久化的pv和pvc创建mysql root密码的secret创建mysql配置文件部署有状态…

Ubuntu小知识总结

Ubuntu相关的小知识总结 Ubuntu系统下修改用户开机密码Vmware虚拟机和主机之间复制、粘贴内容、拖拽文件的详细方法问题描述Vmware tools灰色不能安装解决方法小知识点&#xff1a;MarkDown的空格 Ubuntu系统下修改用户开机密码 在 Ubuntu 中修改用户密码 —— 通过命令行 在 U…

Python 机器学习入门之K-Means聚类算法

系列文章目录 第一章 Python 机器学习入门之线性回归 K-Means聚类算法 系列文章目录前言一、K-Means简介1、定义2、例子3、K-Means与KNN 二、 K-Means实现1、步骤2、优化2.1 初始化优化之K-Means2.2 距离优化之elkan K-Means 三、优缺点1、优点2、缺点 前言 学完K近邻算法&a…

UWB十个知识点

UWB是一直被基于厚望的高精度定位技术 1&#xff1a;定位技术及UWB特点 位置空间感知技术包括了GNSS、RFID、蓝牙和UWB&#xff0c;在室内和区域空间测量最具技术优势的技术是UWB。 GNSS是广域定位技术&#xff0c;室内以及建筑物旁边等场景&#xff0c;GNSS无法实现定位&am…