element-plus文件上传(el-upload)上传单个文件时onChange执行两次

在处理ReactUpload组件的onChange事件时,发现图片对象被打印两次。通过添加对uploadFiles是否为undefined的判断避免了这个问题。这是一个关于JavaScript基础和React开发中遇到的小陷阱的记录,旨在防止未来再次踩坑。

问题代码

const photoListChange: UploadProps['onChange'] = (uploadFile, uploadFiles) => {
  console.log('图片对象uploadFile', uploadFile,typeof uploadFile)
  console.log('图片对象uploadFiles', uploadFiles,typeof uploadFiles)
}


同样对象被 打印了两次

解决办法

const photoListChange: UploadProps['onChange'] = (uploadFile, uploadFiles) => {
  if (uploadFiles!==undefined){
    console.log('图片对象uploadFile', uploadFile,typeof uploadFile)
    console.log('图片对象uploadFiles', uploadFiles,typeof uploadFiles)
  }
}

加一个判断即可
!!问题很基础一下子没反应过来怎么解决,羞耻的记录一下菜鸟踩坑的一天,以免哪天再踩一次!!!

### 使用 Vue3 和 Element Plus 实现表单文件上传 为了实现在 Vue3 中使用 Element Plus 完成表单文件上传的功能,可以按照如下方式构建组件: #### 创建文件上传组件 首先定义一个用于处理文件上传的基础模板结构,在此结构中引入 `el-upload` 组件来管理文件的选择与预览。 ```html <template> <div class="upload-demo"> <el-upload action="#" :on-change="handleChange" multiple :auto-upload="false" ref="uploadRef" > <el-button type="primary">点击上传</el-button> </el-upload> <el-button @click="submitForm" style="margin-left: 10px;">提交</el-button> </div> </template> <script setup lang="ts"> import { ref } from 'vue'; import type { UploadInstance, UploadProps, UploadUserFile } from 'element-plus'; const uploadRef = ref<UploadInstance>(); const formDate = ref({ mFileList: [] as File[] }); // 文件状态改变事件处理器 const handleChange: UploadProps['onChange'] = (uploadFile) => { formDate.value.mFileList.push(uploadFile.raw!); }; // 提交逻辑 const submitForm = async () => { let formData = new FormData(); for(let file of formDate.value.mFileList){ formData.append('files', file); } // 此处应替换为实际的服务端接口地址 try{ await fetch('/api/upload', { method: 'POST', body: formData, }); ElMessage.success('上传成功'); } catch(error){ ElMessage.error('上传失败'); } }; </script> ``` 上述代码展示了如何利用 `el-upload` 来创建一个多选文件上传按钮,并通过自定义的 `handleChange` 函数收集所选文件至 `mFileList` 数组内[^2]。当用户点击“提交”按钮,则会触发 `submitForm` 方法执行真正的文件传输操作。 需要注意的是,这里的 `/api/upload` 需要被替换成真实的服务器接收路径;另外还加入了简单的消息提示框用来反馈上传的结果给前端使用者。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值