Component Development · Vibe Coding
组件开发
AI 辅助设计→代码全流程
在 AI 工具(Cursor / Claude / v0)深度介入的今天,设计师与组件开发的边界已经模糊。一个拥有扎实组件思维、清晰规范文档和 Token 体系的设计师,可以通过 Vibe Coding 将组件从设计稿直接交付为可运行的 React 代码。
01
组件边界与 Props 定义
在 Figma 中明确组件的所有状态(Default / Hover / Active / Disabled / Loading / Error)、变体(Variant)、属性(Props)与响应式断点,为 AI 生成代码提供完整的约束描述。
02
Token 引用与设计约束
组件样式全部通过 Token 引用而非硬编码颜色,Cursor 读取 CSS 变量时天然符合设计系统,无需手动对齐,修改主题时组件自动更新。
03
AI 辅助代码生成
提供 Figma 截图 + 规范描述 + Token 变量表,通过 Cursor / v0 生成 React 组件初稿,设计师审查逻辑、状态处理和边界情况,快速迭代至高保真还原。
04
规范文档与研发交付
输出完整的组件使用文档(Props 说明、使用示例、Do & Don't)、动效规范(timing / easing)、状态流转图,确保研发团队在 AI 辅助之外的手工实现同样准确。
📐 Vibe Coding 中的设计师角色
AI 可以写代码,但它无法判断"这个设计决策是否正确"。设计师的价值在于:定义什么是"好的"组件——清晰的状态逻辑、合理的交互反馈、符合用户心智的视觉层级。这些判断力让设计师成为 AI 辅助开发中不可替代的质量把关者,而非被 AI 替代的人。
React + TypeScript
Figma Auto Layout
CSS Variables
Storybook
Vibe Coding
Component-Driven Design
以下为组件开发规范文档展示,涵盖组件拆解方法论、原子设计理论在实际项目中的应用、组件状态机设计、与研发协同的交付标准,以及真实项目中的 100+ 组件库建设实践记录。
// 组件架构设计原则
好的组件设计不是"把界面切成块",而是找到可复用单元的正确边界。这六条原则是我在 Pisell 100+ 组件库建设中反复验证的架构准则。
01
单一职责
每个组件只做一件事。若一个组件同时处理数据获取、状态管理和 UI 展示,说明它需要被拆分。
02
上下文无关
可复用组件不应依赖父级上下文(Router、Store、特定业务 Props),所有依赖通过明确的 Props 传入。
03
Token 驱动样式
所有视觉属性通过 CSS 变量(Token)引用,禁止硬编码颜色和尺寸,保证主题切换时组件自动适配。
04
状态完整性
每个组件必须定义 Default / Hover / Active / Disabled / Loading / Error 全状态,遗漏状态是 Bug 的高发地带。
05
Accessible First
在组件设计阶段就考虑 aria 属性、键盘导航、焦点管理,比事后补救效率高出 10 倍。
06
文档与代码同源
组件文档嵌入 Storybook / Notion,与代码存在于同一个仓库,确保文档更新与代码变更同步,避免"文档与实现不符"的混乱。
// Props 设计与 Variant 体系
Props 是组件的"对外 API"。好的 Props 设计让组件易用、可预期且 AI 友好——AI 工具通过 Props 类型定义理解组件能力边界。
Button 组件 Props 定义示例 (TypeScript)
interface ButtonProps {
variant: 'primary' | 'secondary' | 'ghost' | 'danger';
size: 'sm' | 'md' | 'lg';
disabled?: boolean;
loading?: boolean;
iconLeft?: ReactNode; // 左图标(可选)
iconRight?:ReactNode; // 右图标(可选)
fullWidth?:boolean; // 撑满容器宽度
onClick?: () => void;
children: ReactNode;
}
✓ GOOD — 明确枚举约束
variant: 'primary' | 'ghost'
size: 'sm' | 'md' | 'lg'
AI 知道所有合法值,不会生成不存在的 variant,研发也不会传错。
✗ BAD — 过于宽泛
variant: string
style?: CSSProperties
任何字符串都合法,AI 和研发只能靠猜,组件行为不可预期。
🎯 Figma Variant 与 React Props 一一对应
在 Figma 组件的 Variant 属性命名与 React Props 命名保持完全一致是最重要的协作规范之一。当 Figma 里的 Variant 属性叫"variant = primary",React 组件的 Props 也叫"variant = primary",AI 工具读取 Figma MCP 数据后可直接生成正确的 JSX 代码,研发工程师也不需要"翻译"设计稿的语言。这条约定简单却极大降低了沟通成本。
// 组件文档规范模板
完整的组件文档是设计系统的"说明书",也是 AI 理解组件意图的重要依据。以下是 Pisell 组件库使用的标准文档模板:
📄 组件文档结构(以 Button 为例)
1. 组件概述
功能描述、使用场景、何时使用 / 不使用(When to use / When not to use),以及与相似组件的区别(Button vs. Link vs. IconButton)。
2. Variant 展示
所有 variant × size × state 的视觉矩阵,用 Figma 截图或 Storybook 内嵌展示,确保每个状态都有视觉参考。
3. Props 说明表
每个 Props 的:名称、类型、默认值、是否必填、说明文字。这是研发最常查阅的内容,也是 AI 工具理解组件 API 的主要依据。
4. 代码使用示例
// ✓ 推荐写法
<Button variant="primary" size="md" onClick={handleSubmit}>
提交订单
</Button>
// ✓ 含图标
<Button variant="ghost" iconLeft={<IconDownload />}>
导出报表
</Button>
// ✗ 避免写法 — 直接传 style 破坏 Token 体系
<Button style={{ background: '#7239ff' }}>提交</Button>
5. 交互规范与动效
Hover 响应时间(建议 150ms)、点击反馈(scale 0.97 + 80ms)、Loading 动画(spinner 旋转周期 600ms)、Disabled 状态的鼠标样式(not-allowed)。
6. 无障碍规范
role 属性(button)、aria-disabled 处理、键盘触发(Enter / Space)、焦点环样式(2px offset outline,不使用 outline: none)。
// AI-Ready 组件设计思路
AI-Ready 组件是指"AI 工具能够准确理解并生成、修改的组件"。实现 AI-Ready 需要在设计阶段就做出一系列刻意的选择。
结构化约束
明确的 Props 类型定义
TypeScript 类型约束是 AI 的"语法书"。严格的 enum、union type、JSDoc 注释,让 AI 生成代码时不需要猜测参数的合法值范围。
语义化命名
让 AI 猜对组件用途
<ProductCard> 比 <Card3> 更易被 AI 正确引用。组件名、Props 名、CSS class 名都应描述意图而非实现细节,AI 在理解上下文时会优先依赖语义线索。
Cursor Rules 集成
将约束注入 AI 上下文
在 .cursorrules 文件中声明组件库的使用规范("优先使用 <Button> 而非原生 <button>"、"所有颜色必须使用 CSS 变量"),让每次 AI 生成都自动遵循规范。
Storybook × MCP
组件 API 的机器可读文档
通过 Storybook Autodocs 自动生成的 API 文档(基于 Props 类型和 JSDoc)可被 AI 工具索引,实现"AI 查阅组件文档 → 生成准确代码"的完整链路。
// React 组件 × Figma 组件双向对应
Figma Code Connect(2024 年发布)实现了 Figma 组件与 React 代码的精确映射,是设计-代码协作的重要里程碑。
Figma 组件层
Button 组件
Variant: Primary / Secondary / Ghost / Danger
Size: Small / Medium / Large
State: Default / Hover / Pressed / Disabled / Loading
Prop: Icon Left (boolean)
Prop: Icon Right (boolean)
Prop: Full Width (boolean)
React 组件层(Code Connect 映射)
variant: {
'Primary': 'primary',
'Secondary': 'secondary',
'Ghost': 'ghost',
'Danger': 'danger'
},
size: {
'Small': 'sm',
'Medium': 'md',
'Large': 'lg'
}
通过 Code Connect 建立映射后,设计师在 Figma 中选中 Button 组件时,会直接看到对应的 React 代码片段,无需研发手动转换。Figma AI 功能也利用此映射直接建议准确的 JSX 写法。
💭 实践心得:组件文档是给未来的自己写的
在 Pisell 组件库建设初期,我们认为"团队内部都懂,文档可以晚点写"。三个月后,当新成员加入、当 AI 工具开始介入、当某个组件需要重构时,我们付出了远超写文档时间的代价去重新理解自己写的东西。好的组件文档不是为了"规范"而存在,它是团队记忆的外部化存储,也是 AI 协作的上下文基础。如果你现在没有时间写文档,你以后会有更多时间处理因为没有文档而产生的混乱。