本节摘要:UI 组件库解决"按钮、表格、弹窗要不要自己写"的效率问题,设计系统解决"多个产品视觉与交互是否一致"的规范问题。本节从"选组件库还是建设计系统"的对比切入,给出组件库选型的六个考量因素、设计系统与组件库的关系模型,以及落地的三个挑战与解法。核心结论:先选一套好的组件库打底,再按业务沉淀自己的设计资产,别一上来就自建轮子。
阅读完本节,你应当能够:
很多公司的前端历史是这样的:每个项目组自己写一套按钮、表格、弹窗,样式大同小异,代码却各写各的——维护成本翻倍,用户看到的界面风格还不统一。后来引入了开源组件库,效率上去了,但新的问题出现:组件库长得"千篇一律",没有品牌辨识度;需求超出组件库范围时,不知道是扩展还是自写。
这两个问题的根源,是把"组件库"和"设计系统"混为一谈了。组件库是"零件仓库"(现成的按钮、表格、弹窗),设计系统是"设计规范 + 组件实现 + 使用文档"的完整体系。前者的价值是"快",后者的价值是"一致"。理解两者的分工,你才知道什么时候该用现成的、什么时候该自己沉淀。
💡 关键直觉:组件库买的是"效率",设计系统买的是"一致性"。多数团队真正需要的,是先买一套好组件库的效率,再慢慢攒出自己的设计系统——而不是一上来就大动干戈自建。
设计系统是"完整图纸 + 施工队 + 质检标准",组件库是"图纸里的标准件清单"。一个成熟的设计系统通常包含:设计规范(色彩、字体、间距)、组件库(实现规范的可复用 UI)、使用文档(怎么用、何时用)、以及模式库(复杂场景的完整方案,如"数据表格 + 筛选 + 分页"的页面模式)。
这条演进路径说明一个关键认知:设计系统不是"一次性建成的工程",而是从组件库出发、逐步生长的体系。多数团队的正确路线是"先买组件库打底 → 定 token 品牌化 → 沉淀业务组件 → 补文档",而不是"一步到位自建设计系统"。走完这条路径的团队,既享受了开源库的效率,又拥有了自己的品牌一致性与复用资产。评估组件库时,也请把它当成"设计系统的起点"而非"终点"——选一个能支撑后续演进的库,比选一个"今天好看"的库更重要。
| 因素 | 要问的问题 | 说明 |
|---|---|---|
| 框架匹配 | 组件库是否为你的框架设计 | 用 React 就选 React 系,跨框架的兼容性通常差 |
| 完整度 | 常用组件是否齐全 | 表格、表单、弹窗、消息、分页、日期……缺关键件很致命 |
| 设计质量 | 默认样式与可定制性 | 是否能换主题色、是否支持暗色模式 |
| 可访问性 | 键盘导航、ARIA 支持 | 对无障碍要求高的项目是硬指标 |
| 维护活跃 | 更新频率与社区 | 长期没人维护的库会逐渐不兼容新框架版本 |
| 体积与性能 | 按需引入是否容易 | Tree Shaking 友好的库能显著减小包体积 |
第一层:基础组件库——用成熟开源库打底(按钮、表格等基础件),解决 80% 的通用需求。
第二层:主题定制——通过组件库的主题机制(色板、字体、圆角 token)做出品牌辨识度,而不是改源码。
第三层:业务组件沉淀——把业务里反复出现的复杂模块(如"订单列表 + 状态筛选 + 批量操作")封装成自己的业务组件,反哺回组件体系。

优先顺序:查文档用现有能力 → 用组合实现(几个组件拼出效果)→ 扩展组件(二次封装加能力)→ 自建。90% 的"组件库没有"其实是不熟悉现有 API 或没找对组合方式。真到了自建,也要按"业务组件"思路沉淀到三层体系的第三层,而不是散落在页面里。
常见问题:设计规范文档写了没人更新,慢慢和实际代码脱节。解法:把设计规范"代码化"——用设计 token(颜色、间距、字体的变量)承载规范,组件库引用这些 token,改 token 即改全局样式。这样规范与实现绑定,不会"文档一套、代码一套"。
⚠️ 常见坑:让每个开发者"按感觉"微调组件样式。单个看都没问题,堆一起就成"五彩斑斓的灰"。应该建立"优先用 token 调整"的约定,改不动 token 才允许局部覆盖,且覆盖要记录原因。
组件库要跨项目复用,就得做"版本与发布管理":用 npm 私有包或内部 registry 发布组件库,项目按版本引用;破坏性变更要走 deprecation 流程,给使用方迁移窗口。这一步做不做,决定了组件库是"共享资产"还是"又一个项目"。
把"设计系统"当成一个渐进演进的资产,而不是"一次性建成的工程"。从"选一套组件库 + 定一个主题色"起步,业务跑稳后逐步沉淀设计 token、业务组件、使用文档。一步到位的设计系统往往在建设期就夭折——渐进式反而更能活下来。这与框架选型的"渐进式"哲学殊途同归。
定制品牌主题时,两条路线各有适用场景。路线一:CSS 变量(设计 token)——把颜色、间距、字体定义成 CSS 变量,组件库读取这些变量,改变量即改全站样式。优点:静态、性能好、无运行时开销;缺点:动态切换(运行时换肤)要额外方案。路线二:运行时主题对象——框架或组件库提供主题配置对象,运行时切换(如亮色/暗色模式、多品牌换肤)。优点:动态灵活;缺点:有运行时开销,且要看组件库对运行时换肤的支持程度。多数内部系统用路线一就够(一次定死品牌色);面向 C 端、需要亮暗切换或多租户换肤的产品,才需要认真评估路线二。别在选组件库时忽略"它支不支持主题定制"——这是决定你未来能不能做出品牌辨识度的关键能力,比组件数量更值得先确认。
组件库是第三方依赖里更新频率较高的一种,升级要按"正式流程"走而不是"直接 npm update"。配套动作有三件:一是升级前读变更日志——大版本升级通常有 breaking changes,先确认影响面;二是用项目做回归——升级后跑一遍测试与关键页面,重点验证表单、表格这类高频组件的交互;三是记录升级版本——在项目文档里写明当前组件库版本与升级时间,避免"不知道现在跑的是哪个版本"的混乱。组件库升级的收益(新特性、Bug 修复、安全更新)通常值得投入,但前提是"有流程地升"而不是"盲目地升"。把组件库的升级节奏纳入项目的依赖治理,视觉层的长期健康才有保障——这与第 3.6 节框架维护性的思路一脉相承。
无障碍(a11y)常被当成"加分项",但对很多产品其实是硬指标:政府采购、公共事业、特殊用户群体都要求键盘可操作与屏幕阅读器友好。评估组件库时,a11y 要看三件事:一是键盘导航——Tab 能不能走通、弹窗能否 Esc 关闭、下拉能否方向键操作;二是ARIA 语义——组件是否带上正确的 role/aria-label/aria-live;三是焦点管理——弹窗打开时焦点是否移入、关闭后是否归还。现代主流组件库(Ant Design、MUI、Angular Material)的 a11y 基础都不错,但细节差异很大,且"库支持"不等于"你的用法支持"——自定义改动往往破坏语义。给选型的建议:把"无障碍审计"加入验收清单(用 axe 这类工具扫一遍),这既是合规要求,也是产品专业度的体现。a11y 修起来最贵的时候,是上线后被投诉的时候——选型阶段多花半天,能省掉上线后的大修。
"同一套业务,PC 与移动端都要有"是常见的多端诉求,组件库在这里的角色需要想清楚。现实解法不是"一套组件库两处硬套",而是"一套设计 token + 两套布局策略":设计 token(颜色、字号、间距)全局一致,保证品牌观感统一;布局策略按端别分开——PC 端多列、宽屏、鼠标交互,移动端单列、触屏优先、拇指可及。组件库提供基础件与 token 支持,两端的页面结构由各自的布局组件负责。硬套的坑在于:把 PC 的三列表格直接塞进手机,要么溢出要么挤成一团。所以多端项目的组件库策略,重点不在"找一套通吃库",而在"确认组件库的响应式能力与 token 体系是否够用"——剩下的布局差异,交给响应式约定的执行。想清楚这一层,多端项目才不会陷入"一个库到处救火"的被动。
选组件库时,"组件多"很吸引眼球,但有一个容易被忽略的现实:组件数量多,不等于你要用的那几个质量高。一个库可能有 200 个组件,但真正决定你项目体验的,往往就是表格、表单、弹窗、日期选择这十几个高频件——它们的质量(性能、可定制性、无障碍、bug 修复速度)才是关键。评估方法:把你项目最高频用的十个组件挑出来,逐个在候选库里试用(交互、性能、定制),而不是数它的组件总数。同样值得留意的,是"组件的生态一致性"——某个库某组件质量高、另一组件质量差的情况很常见(通常是不同时期、不同作者维护的结果)。所以选库要看"高频件整体质量",而不是"总数与宣传"。这个提醒和第 3.2 节社区评估的"按需查证"是同一套思维:宏观数据做参考,微观质量定取舍。
界面层搞定了,接下来是"怎么把页面交给用户"——渲染模式之争。