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

基于antdesign封装一个react的上传组件

项目中遇到了一个上传的需求,看了一下已有的代码很粗糙,而且是直接引用andt的组件,体验不太好,自己使用FormData对象封装了一个上传组件,仅供参考。
代码如下:

  /*** FileUploadModal* @description - 文件选择上传* @param data* @return {HTMLDivElement}* @author xxx*/FileUploadModal(props) {console.log("props", props)const { success } = propsconst [fileList, setFileList] = useState(null);const [isModalVisible, setIsModalVisible] = useState(false);const showModal = () => {setIsModalVisible(true);};const handleFileChange = ({ file, fileList: updatedFileList }) => {setFileList(updatedFileList);if (file.status === 'done') {message.success(`${file.name} file uploaded successfully.`);// 文件上传完毕后清空文件列表setFileList([]);}};// 文件导入const handleUpload = () => {// 在这里处理文件上传逻辑setIsModalVisible(false);console.log('文件已选择:', fileList);const formData = new FormData()formData.append('file', fileList[0].originFileObj)// 调用批量上传接口service.fetchUpload.call(formData, true).then((res) => {return res.json()}).then((res) => {setFileList([])if (res.resCode === 0) {message.success(`"上传成功"`)success()} else {message.success(`${res.resMsg}`)return}res?.hideIndicator?.()}).catch((err) => {console.log("err", err)ErrorPrompt.openErrorMessage(JSON.parse(err.response).resMsg)})};const handleCancel = () => {setFileList([])setIsModalVisible(false);};return (<><Button type="primary" onClick={showModal}>批量导入</Button><Modal title="批量文件导入" visible={isModalVisible}onOk={handleUpload}onCancel={handleCancel}><p>请选择文件进行上传</p><UploadbeforeUpload={() => false} // 禁止自动上传onChange={handleFileChange}rules={[{ required: true, message: "请上传文件" }]}valuePropName="fileList"getValueFromEvent={e=>{if(Array.isArray(e)) return e; return e && e.fileList}}fileList={fileList}><Button>选择文件</Button></Upload></Modal></>);},

使用更简单,因为把触发modal的按钮也封装在组件里了,直接引用即可:

<FileUploadModal success={() => {   //callback functionxxxRef.current.fetchData()xxxRef.current.setState({selectedRows: [],selectedRowKeys: [],})
}}/>

转载请注明出处

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • NPDP含金量高吗?什么人适合学习NPDP?
  • Python函数 之 模块和包
  • 设置DepthBufferBits和设置DepthStencilFormat的区别
  • 动手学深度学习54 循环神经网络
  • 企业微信群发消息高效指南,一文了解!
  • 新型开发语言的试用感受-仓颉语言发布之际
  • RedHat运维-Ansible自动化运维基础26-管理用户与认证
  • 体积大的快递怎么寄便宜?如何寄件寄包裹更省钱?
  • 贪心算法-以高校教材管理系统为例
  • Pandas中使用函数作为map函数的参数时为什么不用传入函数的参数的问题解答
  • 【R语言+Gephi】利用R语言和Gephi实现共发生网络的可视化
  • Web3时代的数字身份认证:安全性与隐私保护探讨
  • Python面试题:如何在 Python 中发送 HTTP 请求?
  • 复合机器人:手脚眼脑的完美结合
  • 一文了解java中Optional
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • Android Studio:GIT提交项目到远程仓库
  • Android系统模拟器绘制实现概述
  • exif信息对照
  • interface和setter,getter
  • JAVA SE 6 GC调优笔记
  • java8-模拟hadoop
  • Linux gpio口使用方法
  • macOS 中 shell 创建文件夹及文件并 VS Code 打开
  • passportjs 源码分析
  • python 装饰器(一)
  • React Native移动开发实战-3-实现页面间的数据传递
  • React-Native - 收藏集 - 掘金
  • Three.js 再探 - 写一个跳一跳极简版游戏
  • tweak 支持第三方库
  • underscore源码剖析之整体架构
  • Vue2.x学习三:事件处理生命周期钩子
  • 百度地图API标注+时间轴组件
  • 高度不固定时垂直居中
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • 免费小说阅读小程序
  • 使用 5W1H 写出高可读的 Git Commit Message
  • HanLP分词命名实体提取详解
  • raise 与 raise ... from 的区别
  • 关于Android全面屏虚拟导航栏的适配总结
  • 湖北分布式智能数据采集方法有哪些?
  • ​1:1公有云能力整体输出,腾讯云“七剑”下云端
  • ​LeetCode解法汇总2182. 构造限制重复的字符串
  • #14vue3生成表单并跳转到外部地址的方式
  • #stm32整理(一)flash读写
  • $.each()与$(selector).each()
  • (1)(1.13) SiK无线电高级配置(五)
  • (4) PIVOT 和 UPIVOT 的使用
  • (C)一些题4
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (poj1.2.1)1970(筛选法模拟)
  • (web自动化测试+python)1
  • (附源码)php新闻发布平台 毕业设计 141646
  • (附源码)spring boot火车票售卖系统 毕业设计 211004