当前位置: 首页 > 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: [],})
}}/>

转载请注明出处

http://www.lryc.cn/news/396068.html

相关文章:

  • ARM裸机:一步步点亮LED(汇编)
  • 【单链表】05 有一个带头结点的单链表L,设计一个算法使其元素递增有序。
  • C语言入门基础题:奇偶 ASCII 值判断(C语言版)和ASCII码表,什么是ASCII码,它的特点和应用?
  • Numpy的广播机制(用于自动处理不同形状的数组)
  • 计算机图形学入门24:材质与外观
  • FTP、http 、tcp
  • 【虚幻引擎】UE4初学者系列教程开发进阶实战篇——生存游戏案例
  • 认识并理解webSocket
  • Scissor算法-从含有表型的bulkRNA数据中提取信息进而鉴别单细胞亚群
  • Linux-磁盘空间不足的清理步骤(详细版本)
  • go-redis源码解析:连接池原理
  • 蓝桥杯备赛攻略(怒刷5个月拿省一)
  • springboot项目jar包修改数据库配置运行时异常
  • 倒计时 2 周!CommunityOverCode Asia 2024 IoT Community 专题部分
  • 使用OpenCV在按下Enter键时截图并保存到指定文件夹
  • 汇川伺服 (4)FFT、机械特性、闭环、惯量、刚性、抑制振动
  • Unity3D中使用并行的Job完成筛选类任务详解
  • 汽车信息安全--欧盟汽车法规
  • @SpringBootApplication 注解
  • java项目总结4
  • JavaScript中的数组方法总结+详解
  • 环境变量Path
  • 基于jeecgboot-vue3的Flowable流程-集成仿钉钉流程(四)支持json和xml的显示
  • 【k8s安装redis】k8s安装单机版redis实现高性能高可用
  • Scala 数据类型
  • Java Executors类的9种创建线程池的方法及应用场景分析
  • LY/T 3359-2023 耐化学腐蚀高压装饰层积板检测
  • 【linux/shell】如何创建脚本函数库并在其他脚本中调用
  • Instruct-GS2GS:通过用户指令编辑 GS 三维场景
  • disql使用