ai-coding-demo

什么是组件化开发?

📖 概述

组件化开发是一种将复杂系统分解为独立、可复用、可组合的组件的软件开发方法。每个组件包含自己的逻辑、样式和结构,可以独立开发、测试和维护,然后组合成完整的应用。

🌟 核心理念

1. 单一职责

2. 可复用性

3. 可组合性

4. 独立性

💻 组件结构

1. 基本组成

组件/
├── index.tsx           # 组件入口
├── Component.tsx       # 组件逻辑
├── Component.module.css # 样式文件
├── Component.test.tsx  # 单元测试
└── Component.stories.tsx # Storybook 故事

2. React 示例

// Button.jsx
import React from 'react'
import './Button.css'

export function Button({ children, variant = 'primary', ...props }) {
  return (
    <button className={`btn btn-${variant}`} {...props}>
      {children}
    </button>
  )
}

// 使用
<Button variant="secondary" onClick={() => {}}>
  提交
</Button>

3. Vue 示例

<!-- Button.vue -->
<template>
  <button :class="['btn', `btn-${variant}`]" v-bind="$attrs">
    <slot />
  </button>
</template>

<script>
export default {
  name: 'Button',
  props: {
    variant: {
      type: String,
      default: 'primary'
    }
  }
}
</script>

<style scoped>
.btn {
  padding: 0.5rem 1rem;
  border: none;
  border-radius: 4px;
  cursor: pointer;
}
</style>

📊 组件分类

1. 原子组件(Atomic)

2. 分子组件(Molecular)

3. 有机体组件(Organism)

4. 模板组件(Template)

5. 页面组件(Page)

🔄 组件通信

1. Props / Props(父传子)

// 父组件
function Parent() {
  return <Child name="Alice" age={25} />
}

// 子组件
function Child(props) {
  return <div>{props.name}, {props.age}</div>
}

2. Emits(子传父)

// 子组件
function Child({ onSubmit }) {
  const handleClick = () => {
    onSubmit('数据')
  }
  return <button onClick={handleClick}>提交</button>
}

// 父组件
function Parent() {
  const handleSubmit = (data) => {
    console.log('收到:', data)
  }
  return <Child onSubmit={handleSubmit} />
}

3. Context(跨层级)

// 创建 Context
const ThemeContext = React.createContext()

// 提供者
function ThemeProvider({ children }) {
  return (
    <ThemeContext.Provider value="dark">
      {children}
    </ThemeContext.Provider>
  )
}

// 消费者
function Button() {
  const theme = useContext(ThemeContext)
  return <button className={theme}>按钮</button>
}

4. 状态管理(全局)

// Redux / Zustand
const useStore = create((set) => ({
  count: 0,
  increment: () => set(state => ({ count: state.count + 1 }))
}))

function Component() {
  const { count, increment } = useStore()
  return <button onClick={increment}>{count}</button>
}

🎯 组件设计原则

1. 开放封闭原则

2. 里氏替换原则

3. 依赖倒置原则

4. 接口隔离原则

📦 组件库

React 生态

Vue 生态

🛠️ 开发工具

1. Storybook

2. Testing Library

3. Bit / Nx

✅ 优缺点

优点

缺点

🎯 最佳实践

  1. 保持组件职责单一
  2. 使用 PropTypes/TypeScript
  3. 合理拆分组件层级
  4. 避免组件过度嵌套
  5. 文档和示例
  6. 单元测试覆盖
  7. Storybook 故事文档
  8. 持续重构优化

📚 学习资源

🔗 相关链接