Skip to content

React 项目实践

如何设计 React 组件库和 Design System?

组件库的难点是稳定契约和长期治理,不是把一组视觉样式打包发布。

适合阶段:资深前端 / 组件库负责人核心能力:API 设计 · 可访问性 · 版本治理

面试官想考什么

  • 什么组件值得进入组件库? 考察复用和抽象判断。
  • 如何设计受控、非受控和复合 API? 考察契约稳定性。
  • 主题、无障碍和视觉回归如何治理? 考察完整工程能力。
  • 如何发布 breaking change? 考察生态和协作意识。

一句话回答

text
React 组件库要围绕稳定的用户语义设计 API,同时提供无障碍、主题、类型、测试和版本治理,而不是只复用 CSS。

面试回答详解

1. 组件进入门槛

组件应有明确语义、至少多个真实场景、稳定状态模型和维护责任。一次性业务流程不应为了“复用”强行抽象,否则公共 API 会被偶然需求绑架。

2. API 设计

支持受控和非受控时要明确 value/defaultValueopen/defaultOpen 等语义,事件回调保持稳定。复合组件通过 children、Context 和语义化子组件表达结构,避免暴露内部 DOM 层级。

3. 基础能力

键盘导航、焦点管理、ARIA、错误态、loading、RTL、主题 token 和 SSR/hydration 一致性应成为组件基线。视觉 token 与业务主题分离,减少消费方覆盖内部选择器。

4. 发布治理

组件包应提供类型、文档、变更记录、单元/交互/视觉测试和迁移说明。breaking change 需要 codemod、弃用周期和回滚路径;依赖 React 版本和 peer dependency 要明确。

可直接背诵的 30 秒回答

text
我设计组件库时先定义稳定的用户语义和状态模型,再设计受控、非受控、children 和事件 API。组件基线必须包含键盘、焦点、ARIA、主题 token、SSR 一致性、类型和行为测试。发布上用语义化版本、弃用周期、迁移文档和视觉回归治理长期兼容,而不是只维护一套 CSS。

扩展知识

组件库质量维度

text
语义正确 + 交互可达 + API 稳定 + 类型完整 + 测试可回归 + 发布可迁移

面试官追问链

追问一:为什么不让业务方直接覆盖 CSS?

  • 考察点:是否理解样式契约。
  • 回答方向:允许明确的 token、slot 和 className 扩展,但避免依赖内部 DOM;否则升级会产生隐性 breaking change。

追问二:如何处理组件库和 React 新版本升级?

  • 考察点:是否具备生态治理能力。
  • 回答方向:用 peer dependency、兼容测试矩阵、迁移文档和渐进发布验证,不把内部实现细节当公开契约。

追问三:组件库如何证明提升了效率?

  • 考察点:是否会用指标复盘。
  • 回答方向:看接入时间、重复代码、UI 缺陷、无障碍问题、bundle 成本和升级成功率,而不是只看下载量。

推荐阅读

基于 MIT 协议开源