如何设计一个组件

本文最后更新于 2025年11月1日 晚上

设计一个组件时,不仅仅是写代码,而是要创建一个 可复用、可维护、可扩展 的 UI 功能模块。

原则

组件设计要遵循的基本原则:

原则 解释
单一职责 组件要专注于一件事
可读性强 代码命名清晰
开放封闭 对扩展开放,对修改关闭
可扩展 能够支持更多场景
可复用 独立、不依赖具体业务
低耦合 减少与外部依赖

步骤

1️⃣ 明确需求 & 使用场景

  • 组件要解决什么问题?
  • 由谁来使用?在什么页面被使用?
  • 是否需要复用?复用的方式是什么?

✅ 示例:设计一个 Button

  • 支持不同尺寸、类型(主按钮/次按钮/危险按钮)
  • 可设置 loading
  • 可禁用

2️⃣ 输入输出设计

组件的核心是:输入(props)→ 输出(UI 或 Events)

设计时要问:

  • 是否支持双向绑定?
  • 是否支持扩展?
  • 默认值是什么?

✅ 示例:Button Props 定义:

Prop 类型 必传 作用
type primary / default / danger 样式类型
size small / medium / large 尺寸
disabled boolean 禁用
loading boolean 加载状态
onClick function 点击事件

3️⃣ UI & State 设计

组件自身是否需要内部 state:

  • “纯组件”:只根据 props 渲染 → 不需要内部 state
  • “有状态组件”:包含交互逻辑 → 需要内部 state

✅ Button 是否需要 state:

  • loading 的状态通常交给父组件管理 → 无需内部 state
  • 尽量保持组件 可控、可预测

4️⃣ 交互逻辑与可访问性

需要考虑:

  • Keyboard 操作(Tab、Enter)
  • ARIA 属性
  • 动效是否友好
  • 各状态反馈(hover / active / disabled)

5️⃣ 扩展与可维护性

组件不能只为当前场景写死:

  • 是否支持主题切换?
  • 是否支持 className、style 自定义?
  • 是否支持图标插槽(slot/children)?

6️⃣ 文档与使用示例

一个组件如果没有文档,就不算真正完成,应包含:

  • API 文档
  • Demo 示例
  • 禁用示例 / loading 示例等状态说明

总结

一个优秀的组件 = 清晰场景 ➜ 合理设计 Props ➜ 稳定交互 ➜ 易扩展 & 有文档

流程:需求 → Props/事件 → 状态 → UI 交互 → 扩展性 → 文档


如何设计一个组件
https://xuekeven.github.io/2025/11/01/如何设计一个组件/
作者
Keven
发布于
2025年11月1日
更新于
2025年11月1日
许可协议