本文主要是对 Element Plus
和 Arco Design Vue
两个组件库的简单对比,可能对你的技术选型有帮助,本文的主观成分比较多
CSS设计变量
Element Plus
--el-text-color-primary: #303133;
--el-text-color-regular: #606266;
--el-text-color-secondary: #909399;
--el-text-color-placeholder: #a8abb2;
--el-text-color-disabled: #c0c4cc;
Arco Design Vue
--color-text-1: #121314; // 标题、重点文本
--color-text-2: #5c5c5c; // 常规正文
--color-text-3: #909399; // 次要正文、提示文本
--color-text-4: #c2c2c2; // 辅助文本、禁用文本、占位符placeholder、提示文本
相比之下,个人比较喜欢arco
的命名方式,简单、易记、简短、优雅
按钮 Button 对比
先简单对比下各自按钮的props
,按钮能大概看出两者的设计理念和规范性
Element Plus
Arco Design Vue
Element
一直以简单易用受欢迎,通过上面对比,个人感觉Arco
的更简洁,更易用,Element Plus
的props
显得有些混乱,很容易写成以下代码:
<template>
<el-button type="primary" circle round text link> 按钮 </el-button>
</template>
按钮形状没有进行归集,而且要经常性看文档,再来看看arco
的
对形状等进行了归类,对ts
提示友好很多,你不需要记有什么形状,你只需要记住shape
就行了,详细点的自己去对比下
还有就是扩展性,比如以后我想加个菱形
的形状,像element
来说要新增一个属性,会造成props
属性越来越多,对于arco
来说,只需要在shape
多加一个属性值就行,而且这对于组件内部的封装逻辑也会清晰很多,也更容易去维护
看过太多的第三方组件库,以及一些个人开发的组件库,大部分都是仿element
的设计,可见element
影响太广了,不过还是觉得arco
的按钮设计棒一些
Row/Col 组件对比
Element Plus
Arco
说实话,我不太喜欢element
对align
的值篡改,css的align
的值就是 start
| center
| end
| stretch
,如果我给row
加了flex-direction: column;
属性,那align
就不是top
或者bottom
的含义了
Card 组件对比
Element Plus
Arco
header
一般指的是头部的意思,Element Plus
在这里把它当做标题,标题我觉得用title
更合适一些,header
表示整个头部
描述列表 Descriptions 组件对比
Element Plus
Arco
Arco
支持data
属性,同时也支持插槽形式, 且支持align
文字对齐,这个很方便,更多细节和功能自己研究,Element Plus
的DescriptionsItem
有align
和label-align
,不过我认为放在Descriptions
上更合适
表格 Table 组件对比
Element Plus
这个不多说了,熟悉的人都比较了解,Element
表格是没有自带分页的
Arco
通过下面例子,可以看出Arco
支持columns
属性,通过配置形式生成,自带分页,pagination
属性完全继承分页组件的props
(组件库很多用到了继承思维,这个很好),pagination
里面可以写onChange
和onPageSizeChange
事件,这对hooks
封装非常合适
hooks封装具体可以看看这篇文章: useTable表格hooks封装和使用(Vue3)
Select 组件对比
Element Plus
Arco
Arco
支持options
属性,通过配置生成下拉选项,不需要插槽的形式,其中每项option
可以配置tag-props
,这里是直接继承tag
组件的props
,扩展性很好,功能丰富,更多细节功能自己去对比
数字输入框 InputNumber 对比
Element Plus
Arco
Element Plus
没有格式化展示功能,扩展性一般
Arco
的格式化展示示例,如果想要在数字后面加%
等符号,格式化会非常方便
抽屉 Drawer 组件对比
Element Plus
Arco
Arco
的抽屉自带确认取消
按钮,这对我们平时开发带来了很大便捷性,而且这两个按钮通过ok-button-props
和 cancel-button-props
继承按钮组件的props
,width
和height
属性相对于size
来说,语义更好
Arco
还支持函数式抽屉,这是Element Plus
不具备的,具体自己研究
Modal 对比 Dialog / MessageBox
Element Plus
Arco
Arco
的Modal
相当于Element Plus
的Dialog
和MessageBox
整合,但是Element
的扩展性略有欠缺,首先确认取消按钮没能继承button
组件,Arco
是能够继承的,此外Arco
支持拖拽,自定义动画等功能
Arco函数调用
支持命令式更新(异步获取数据后,回显)
tsx方式
具体可以看看这篇文章 vue3 配合 tsx 优雅的弹窗方案
定制性
Arco
的生态中,有 DesignLab风格配置平台,能够快速针对组件样式进行diy
,能够快速制定出所需样式风格
虽然官方主题不是线性主题,但是通过DesignLab
平台,你能够快速制定出一套线性主题,此外,官方主题中还有多套线性主题,同时在主题商店中,目前已经有上千套主题(在 官网 右下角处
有个切换主题风格的按钮,可自行预览下),都可通过npm
方式直接下载使用
tabs组件对比(2024-04-01)
Element Plus的Tabs
组件右侧是不支持插槽的,要实现以下布局只能自己改,并且比较麻烦,自己修改的对于屏幕宽度缩小的时候兼容性差
Arco 是支持右侧插槽的,极大增加了便捷性
最后
其他组件我就不一一对比了,Element
都很熟悉了,本文的Element
例子相对较少,不过也能大概看出两个组件库的设计和规范性,仅供大家选型做简单对比