别乱封装,你看出事儿了吧...

今天组里小兄弟跟我反馈说之前不知道谁封装的一个组件,出现了一个非常"诡异"的BUG。

这是个上传组件,BUG现象是如果设置了 accept 拖拽文件是可以正常上传的,但是不设置的话拖拽文件上传不了。

上来就给我弄懵了,一般不都是加限制会导致功能异常嘛?这怎么反过来了。

详细看了看封装的代码:

html 复制代码
<template>
  <el-upload
    class="upload-wrap"
    drag
    ...
    :accept="accept"
    ...
  >
    <i class="el-icon-upload" />
    <div class="el-upload__text">将文件拖到此处,<em>点击上传</em></div>
  </el-upload>
</template>

<script>
export default {
  name: 'Upload',
  props: {
    ...
    // 文件上传类型
    accept: {
      type: String,
      default: () => {
        return '*'
      }
    },
    ...
  }   
}

貌似没啥特别的地方啊?

又翻了翻官方文档,也没发现 acceptdrag 属性有啥联系啊?

一番尝试之后终于锁定了问题,如果不加 accept 则默认参数为 *。而在文件类型限制这里,* 符号是存在兼容性问题的。

修改方案为:

html 复制代码
<template>
  <el-upload
    drag
    ...
    :accept="computedAccept"
    ...
  >
    <i class="el-icon-upload" />
    <div class="el-upload__text">将文件拖到此处,<em>点击上传</em></div>
  </el-upload>
</template>

<script>
export default {
  name: 'Upload',
  props: {
    ...
    // 文件上传类型
    accept: {
      type: String,
      default: () => {
        return '*'
      }
    },
    ...
  },
  computed: {
    computedAccept() {
      return this.accept === '*' ? '' : this.accept
    }
  }
}

因为不清楚他在别的地方是否还有特殊应用,所以没对原逻辑大改。其实直接把 * 符号删除就行。

咱就说没这么深得了解就别封装,唉,还是那个建议:《# 再说一遍!不要封装组件库!》

相关推荐
证榜样呀22 分钟前
2026 大专计算机专业必考证书推荐什么
大数据·前端
蓝帆傲亦30 分钟前
前端性能极速优化完全指南:从加载秒开体验到丝滑交互
前端·交互
鱼毓屿御42 分钟前
如何给用户添加权限
前端·javascript·vue.js
JustHappy1 小时前
「web extensions🛠️」有关浏览器扩展,开发前你需要知道一些......
前端·javascript·开源
何中应1 小时前
nvm安装使用
前端·node.js·开发工具
Java新手村1 小时前
基于 Vue 3 + Spring Boot 3 的 AI 面试辅助系统:实时语音识别 + 大模型智能回答
vue.js·人工智能·spring boot
雯0609~1 小时前
hiprint:实现项目部署与打印3-vue版本-独立出模板设计与模板打印页面
前端·vue.js·arcgis
杜子不疼.1 小时前
【Linux】教你在 Linux 上搭建 Web 服务器,步骤清晰无门槛
linux·服务器·前端
程序员Agions2 小时前
useMemo、useCallback、React.memo,可能真的要删了
前端·react.js
David凉宸2 小时前
Vue 3 + TS + Vite + Pinia vs Vue 2 + JS + Webpack + Vuex:对比分析
javascript·vue.js·webpack