在 Vue3 项目中,对 UI 组件库(如 Element Plus、Ant Design Vue 等)进行二次封装可大幅提升开发效率和代码复用性。以下是可重点封装的组件类型及核心实践思路:
📦 一、基础 UI 组件
-
按钮(Button)
-
封装不同状态(禁用、加载中)、样式(主题色、尺寸)和图标组合。
-
支持权限控制(如
v-auth
指令隐藏无权限按钮)。
-
-
输入框(Input)
-
集成搜索联想、格式化输入(如手机号分隔)、校验规则。
-
透传属性与事件:通过
v-bind="$attrs"
继承原生功能。
-
-
弹窗(Modal/Dialog)
-
统一标题、底部按钮样式,支持拖拽、全屏和动态内容插槽。
-
🧩 二、布局与数据展示组件
-
表格(Table)
-
核心功能:动态列配置(
columns
驱动)、分页逻辑(本地/服务端)、多选排序。 -
优化:虚拟滚动(长列表)、行内操作按钮(编辑/删除)。
-
-
卡片(Card)
-
标准化标题区、内容区、操作区插槽,支持折叠动画。
-
-
标签页(Tabs)
-
封装缓存策略(
KeepAlive
)、懒加载,避免重复渲染。
-
📝 三、表单与数据录入组件
-
表单容器(Form)
-
统一校验规则(如手机号、邮箱正则)、提交/重置逻辑,支持响应式布局。
-
-
动态表单(DynamicForm)
-
通过 JSON 配置生成表单项(输入框、选择器、日期范围)。
-
-
上传组件(Upload)
-
封装文件类型校验、预览图生成、多文件并发上传。
-
🔧 四、业务与高阶组件
-
搜索框(Search)
-
集成历史记录、热门推荐,支持防抖搜索。
-
-
全局反馈组件
-
统一加载状态(
GlobalLoading
)、错误提示(Toast
),记录操作日志。
-
-
高阶组件(HOC)
-
如
withLoading
包装器,为异步操作添加加载状态。
-
⚙️ 五、其他实用组件
-
分页器(Pagination)
-
封装页码切换逻辑,支持自定义每页条数选项。
-
-
图表组件(Charts)
-
基于 ECharts 封装常用图表(折线图、饼图),简化配置项。
-
-
权限控制组件
-
通过指令(如
v-permission
)动态隐藏无权限元素。
-
💎 封装最佳实践
-
透传机制
-
使用
$attrs
传递属性/事件,$slots
透传插槽,减少重复声明。
-
-
组合式 API 复用
-
抽离逻辑为
usePagination
、useFormValidate
等钩子。
-
-
类型安全(TypeScript)
-
定义
interface
规范配置项(如ColumnConfig
),避免运行时错误。
-
-
性能优化
-
按需加载组件、虚拟滚动、
shallowRef
减少响应式开销。
-
🌟 总结
通过封装 表格、表单、弹窗 等高频组件,可减少 70% 重复代码,显著提升开发效率。核心在于:
-
✅ 配置化驱动:JSON 配置动态生成 UI,适应业务变化。
-
✅ 逻辑与视图分离:Composition API 抽离复用逻辑。
-
✅ 渐进式封装:先覆盖 80% 通用场景,再通过插槽扩展边缘需求。
实际案例参考: