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

今天组里小兄弟跟我反馈说之前不知道谁封装的一个组件,出现了一个非常"诡异"的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 '*'
      }
    },
    ...
  }   
}

貌似没啥特别的地方啊?

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

一番尝试之后终于锁定了问题,如果不加 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
    }
  }
}

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

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

相关推荐
Setsuna_F_Seiei2 小时前
前端转型 Agent 开发 06 之 Agent Memory 记忆系统(让 Agent 更智能,更懂你)
前端·agent·ai编程
志尊宝3 小时前
Vue3 零基础每日笔记(073):keep-alive 页面缓存实战——列表页返回不丢状态
vue.js·笔记·缓存·#vue #前端 #前端开发·#javascript·#vue.js
zhangzeyuaaa3 小时前
Ruby 多线程、GVL(GIL)与 Mutex 完全指南
开发语言·前端·ruby
默_笙3 小时前
🌊 向量库和 ES 都查不出"关系",我只好给奶茶建了一张人脉网
前端·javascript
优选资讯4 小时前
标签打印软件怎么对接 Excel 数据
前端·excel
一个风轻云淡5 小时前
GCC 和 GDB命令简单解读
java·linux·前端
u0111026756 小时前
图片处理接口如何统一错误信息 前端提示与后端错误码设计
前端·状态模式
福兮说6 小时前
浏览器里把 iPhone 的 HEIC 转成 JPG:Chrome 解不开、转完大了七成、拍摄时间全丢,六个坑实测
前端·javascript·图像处理·chrome·ios·iphone·heic
libokaifa6 小时前
把语音模型塞进手机:sherpa-onnx 在 Android 上的 ASR / TTS
前端
deli0076 小时前
DLA 枝晶生长实测:5000 个粒子集体停摆之后,分形维数收敛到 1.70
前端