For the complete documentation index, see llms.txt. This page is also available as Markdown.

自定义组件

我们区分两种自定义组件类型,它们各自有不同的流程和预期。

组件类型

A) 项目特定自定义组件

为特定项目或页面构建的组件,不打算在其他项目中复用。

示例:

  • 一种 Box 带有特殊布局,仅在一个项目中使用

  • 一种 Card 为某个项目页面定制布局的变体

  • 项目特定的数据可视化

  • 一次性布局组件

何时使用:

  • 组件解决了某个项目独有的问题

  • 不太可能在其他项目中需要

  • 过于具体,无法泛化

B) UI2 候选组件

旨在在多个项目和产品中复用的组件。

示例:

  • Navbar - 全站导航

  • UserMenu - 用户账户菜单

  • 标准化 Modal 对话框

  • 正在从 UI1 迁移的组件

何时使用:

  • 组件将被用于多个项目

  • 代表一种常见的 Decentraland 模式

  • 替换或扩展一个 UI1 组件


项目特定组件

要求

以 MUI 为基础

必须 尽可能扩展现有 MUI 组件:

不要分叉或重复实现 MUI 已经覆盖的模式:

  • 使用 Card 而不是创建带阴影的自定义 box

  • 使用 Button 而不是创建样式化的 anchor

  • 使用 TextField 而不是创建自定义输入框

  • 扩展 Dialog 而不是创建自定义模态框

仅使用主题值

必须 使用 UI2 主题中的值:

不允许使用任意值:

  • 颜色:使用 theme.palette 或 dclColors

  • 间距:使用 theme.spacing(n)

  • 圆角:使用 theme.shape.borderRadius

  • 排版:使用 theme.typography 变体

  • 断点:使用 theme.breakpoints 辅助函数

状态与可访问性

必须 定义并实现所有交互状态:

必须 实现基本可访问性:**

  • 键盘导航 - 可通过键盘聚焦并操作

  • 焦点指示器 - 可见的焦点状态

  • ARIA 标签 - 在文本不可见的地方

  • 语义化 HTML - 使用合适的元素

  • 颜色对比度 - 符合 WCAG AA 标准

示例:项目特定组件


UI2 候选组件

将在多个项目间共享的组件需要更高标准和更详尽的文档。

要求

主题对齐

必须 仅依赖 UI2 主题值:

Storybook 覆盖

必须 添加完整的 Storybook 示例:

必需覆盖:

  1. 所有属性和变体

    • 每种属性组合

    • 所有尺寸变体

    • 所有颜色变体

  2. 所有状态

    • 空闲/默认

    • 加载中

    • 错误

    • 禁用

    • 悬停(通过 pseudo states addon)

    • 焦点(通过 pseudo states addon)

  3. 交互

    • 点击处理器

    • 表单提交

    • 键盘导航

  4. 配色方案

    • 浅色模式

    • 深色模式

  5. 响应式行为

    • 关键断点(xs、md、lg)

    • 记录各断点下的行为

示例 Storybook 文件:

组件结构

UI2 候选组件应遵循以下结构:

文档要求

必须 在组件 README 中包含:

  1. 目的 - 解决了什么问题?

  2. 用法 - 如何使用该组件

  3. 属性 - 所有属性及其类型和说明

  4. 示例 - 常见使用场景

  5. 可访问性 - 键盘支持、ARIA 标签

  6. 主题 - 使用了哪些主题值

  7. 迁移说明 - 如果替换的是 UI1 组件

示例 README:

测试要求

必须 包含以下测试:

  • 属性渲染

  • 用户交互

  • 可访问性功能

  • 响应式行为

  • 错误状态


决策矩阵

用它来决定要创建哪种类型的组件:

问题
项目特定
UI2 候选

其他项目会使用它吗?

否

是

UI1 中有对应项吗?

不适用

可能

需要 Storybook 文档吗?

否

是

需要全面测试吗?

基础

详尽

需要设计评审吗?

项目级

UI2 级

可以使用项目特定模式吗?

是

否

必须在所有主题中正常工作吗?

否

是


审批流程

项目特定组件

  1. 由项目维护者进行代码审查

  2. 验证主题符合性

  3. 在项目上下文中测试

  4. 批准后合并

UI2 候选组件

  1. 设计评审和批准

  2. 技术设计评审

  3. 实现

  4. Storybook 示例

  5. 全面测试

  6. 可访问性审查

  7. 代码评审

  8. 向 UI2 仓库提交 PR

  9. 版本化并发布

  10. 更新依赖项目


最佳实践

组合优于定制

渐进式增强

从简单开始,按需添加功能:

  1. 具有核心功能的基础版本

  2. 添加响应式行为

  3. 添加无障碍功能

  4. 添加高级交互

  5. 优化性能

文档优先

在编写代码之前:

  1. 编写组件 README

  2. 定义 props 接口

  3. 列出所需状态

  4. 规划 Storybook 故事

  5. 然后实现


下一步

最后更新于