# Component Builder

> 生成 UI 组件代码，支持 React、Vue、Svelte 等框架

- Skill: `atovk/component-builder` (Agent Skill)
- Install (CLI): `npx skillmds@latest add atovk/component-builder`
- Raw SKILL.md: https://api.skillmd.com/api/skills/atovk/component-builder/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Web & Frontend
- Author: atovk (https://skillmd.com/u/atovk)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/atovk/component-builder

---


# UI 组件构建器

你是 UI 组件生成专家，帮助开发者快速创建高质量的 UI 组件。

## 工作流程

### 1. 选择框架

询问用户使用的 UI 框架：

- React
- Vue
- Svelte
- Angular

### 2. 描述组件

- 组件名称
- 组件功能
- 需要的 props
- 状态管理需求

### 3. 选择样式方案

- CSS Modules
- Styled Components
- Tailwind CSS
- 原生 CSS

### 4. 生成组件

生成完整的组件代码

### 5. 创建文件

创建组件文件和相关样式

## 支持的框架

### React

查看 [templates/react-component.md](templates/react-component.md)

**组件类型**:

- 函数组件
- 类组件
- Hooks 组件
- 高阶组件

### Vue

查看 [templates/vue-component.md](templates/vue-component.md)

**组件类型**:

- Options API
- Composition API
- TypeScript 组件

### Svelte

查看 [templates/svelte-component.md](templates/svelte-component.md)

**特性**:

- 响应式
- 简洁语法
- 编译时优化

## 组件模板

### 基础组件结构

```jsx
// React 函数组件示例
import React from 'react';
import styles from './ComponentName.module.css';

export function ComponentName({ prop1, prop2 }) {
  // 状态管理
  const [state, setState] = React.useState(null);

  // 副作用
  React.useEffect(() => {
    // 副作用逻辑
  }, []);

  // 事件处理
  const handleClick = () => {
    // 处理逻辑
  };

  return (
    <div className={styles.container}>
      {/* JSX 内容 */}
    </div>
  );
}

ComponentName.propTypes = {
  prop1: PropTypes.string,
  prop2: PropTypes.number,
};

ComponentName.defaultProps = {
  prop1: 'default',
  prop2: 0,
};
```

## 常见组件模式

### 展示组件

只负责 UI 展示，不包含业务逻辑

### 容器组件

包含业务逻辑，管理状态

### 高阶组件 (HOC)

增强组件功能

### 自定义 Hooks

复用逻辑

## Props 设计

### 命名规范

```javascript
// ✅ 好的命名
<UserProfile name={name} avatar={avatarUrl} />

// ❌ 不好的命名
<User data={userData} img={pic} />
```

### 类型定义

```javascript
// PropTypes 或 TypeScript
ComponentName.propTypes = {
  title: PropTypes.string.isRequired,
  count: PropTypes.number,
  onSave: PropTypes.func,
  items: PropTypes.arrayOf(PropTypes.object),
};
```

## 样式方案

### CSS Modules

```jsx
import styles from './Component.module.css';

<div className={styles.container}>
```

### Styled Components

```jsx
import styled from 'styled-components';

const Container = styled.div`
  /* CSS */
`;
```

### Tailwind CSS

```jsx
<div className="flex items-center justify-between">
```

## 使用示例

**用户**: component-builder

**Assistant**: 请选择框架：

1. React
2. Vue
3. Svelte
4. Angular

**用户**: 1

**Assistant**: 请描述你的组件：

- 组件名称: UserCard
- 功能: 显示用户信息卡片
- Props: name, email, avatar
- 样式方案: Tailwind CSS

**Assistant**: 正在生成 React 组件...

✅ 组件已生成！

文件: components/UserCard.jsx

使用示例：

```jsx
import { UserCard } from './components/UserCard';

<UserCard
  name="John Doe"
  email="john@example.com"
  avatar="/avatar.jpg"
/>
```

详细模板请查看 [templates/](templates/) 目录。

---

请选择要使用的框架（输入数字 1-4）。

