HiHuo
首页
博客
手册
工具
首页
博客
手册
工具
  • Vue & CSS 进阶

    • 第0章:工具链与开发体验
    • 第1章:TypeScript 核心
    • 第2章:CSS 现代能力
    • 第3章:Vue3 核心与原理
    • 第4章:路由与状态管理
    • 第5章:工程化与性能
    • 第6章:测试与质量
    • 第7章:CSS 进阶专题
    • 第8章:项目实战A - SaaS仪表盘
    • 第9章:项目实战B - 内容社区
    • 第10章:Vue 内核深入
    • 第11章:微前端与部署
    • CSS 变量体系与主题系统深度指南
    • 前端安全与防护专题
    • CSS 专题:动效优化与微交互
    • CSS 专题:图片与图形处理
    • 实时通信与WebSocket专题
    • 开发工具与调试技巧专题
    • 新兴技术与未来趋势专题
    • 移动端开发与PWA专题
    • 附录A:代码片段库
    • 附录B:练习题集

附录B:练习题集

分章节练习题,帮助巩固学习成果,提升实战能力

📚 练习说明

本练习题集按照教程章节顺序组织,每个章节包含:

  • 基础练习:巩固核心概念
  • 进阶练习:提升应用能力
  • 实战练习:综合运用技能
  • 挑战练习:拓展思维边界

🎯 第0章:工具链与开发体验

基础练习

  1. 环境配置

    • 安装 Node.js 18+ 和 pnpm
    • 配置 VS Code 开发环境
    • 创建第一个 Vue3 + TypeScript 项目
  2. 代码规范

    • 配置 ESLint 和 Prettier
    • 设置提交规范(commitlint + husky)
    • 配置自动格式化

进阶练习

  1. 项目模板

    • 创建一个可复用的项目模板
    • 包含完整的工具链配置
    • 支持一键初始化新项目
  2. 开发工具

    • 配置调试环境
    • 设置热重载
    • 优化开发体验

实战练习

  1. 脚手架工具
    • 开发一个 CLI 工具
    • 支持项目创建和配置
    • 集成最佳实践

🎯 第1章:TypeScript 核心

基础练习

  1. 类型系统

    // 练习1:定义用户类型
    interface User {
      id: number
      name: string
      email: string
      age?: number
    }
    
    // 练习2:实现类型安全的函数
    function createUser(userData: Partial<User>): User {
      // 实现函数
    }
    
  2. 泛型应用

    // 练习3:实现通用 API 响应类型
    interface ApiResponse<T> {
      data: T
      message: string
      success: boolean
    }
    
    // 练习4:实现通用工具函数
    function pick<T, K extends keyof T>(obj: T, keys: K[]): Pick<T, K> {
      // 实现函数
    }
    

进阶练习

  1. 高级类型

    // 练习5:实现条件类型
    type NonNullable<T> = T extends null | undefined ? never : T
    
    // 练习6:实现映射类型
    type Partial<T> = {
      [P in keyof T]?: T[P]
    }
    
  2. Vue 类型集成

    // 练习7:定义组件 Props 类型
    interface ButtonProps {
      type?: 'primary' | 'secondary' | 'danger'
      size?: 'small' | 'medium' | 'large'
      disabled?: boolean
    }
    
    // 练习8:定义 Emit 类型
    interface ButtonEmits {
      click: [event: MouseEvent]
      focus: [event: FocusEvent]
    }
    

实战练习

  1. 类型安全的状态管理

    • 实现类型安全的 Pinia store
    • 定义完整的用户状态类型
    • 实现类型安全的 actions
  2. API 类型定义

    • 定义完整的 API 接口类型
    • 实现类型安全的 HTTP 客户端
    • 处理错误类型

🎯 第2章:CSS 现代能力

基础练习

  1. 布局练习

    /* 练习1:三栏布局 */
    .three-column {
      display: grid;
      grid-template-columns: 200px 1fr 200px;
      gap: 20px;
      min-height: 100vh;
    }
    
    /* 练习2:响应式网格 */
    .responsive-grid {
      display: grid;
      grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
      gap: 20px;
    }
    
  2. 现代特性

    /* 练习3:容器查询 */
    .card {
      container-type: inline-size;
    }
    
    @container (min-width: 400px) {
      .card {
        display: flex;
        gap: 20px;
      }
    }
    
    /* 练习4::has() 选择器 */
    .field:has(input:focus) {
      border-color: #007bff;
    }
    

进阶练习

  1. CSS 变量系统

    /* 练习5:设计令牌 */
    :root {
      --color-primary: #007bff;
      --color-secondary: #6c757d;
      --spacing-sm: 8px;
      --spacing-md: 16px;
      --spacing-lg: 24px;
    }
    
    /* 练习6:主题切换 */
    [data-theme="dark"] {
      --color-primary: #0d6efd;
      --color-secondary: #adb5bd;
    }
    
  2. 动画效果

    /* 练习7:关键帧动画 */
    @keyframes slideIn {
      from {
        transform: translateX(-100%);
        opacity: 0;
      }
      to {
        transform: translateX(0);
        opacity: 1;
      }
    }
    
    /* 练习8:过渡效果 */
    .button {
      transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
    }
    

实战练习

  1. 组件库设计

    • 设计一套完整的 CSS 组件库
    • 实现主题切换功能
    • 支持暗色模式
  2. 响应式设计

    • 实现移动端优先的设计
    • 使用容器查询优化组件
    • 实现流畅的交互效果

🎯 第3章:Vue3 核心与原理

基础练习

  1. 响应式系统

    // 练习1:实现简化版 ref
    function ref<T>(value: T) {
      // 实现响应式 ref
    }
    
    // 练习2:实现简化版 reactive
    function reactive<T extends object>(target: T) {
      // 实现响应式 reactive
    }
    
  2. 组合式 API

    // 练习3:实现 useCounter
    function useCounter(initialValue = 0) {
      // 实现计数器逻辑
    }
    
    // 练习4:实现 useLocalStorage
    function useLocalStorage<T>(key: string, defaultValue: T) {
      // 实现本地存储逻辑
    }
    

进阶练习

  1. 自定义指令

    // 练习5:实现 v-focus 指令
    const vFocus = {
      mounted(el: HTMLElement) {
        el.focus()
      }
    }
    
    // 练习6:实现 v-click-outside 指令
    const vClickOutside = {
      mounted(el: HTMLElement, binding: any) {
        // 实现点击外部逻辑
      }
    }
    
  2. 插件开发

    // 练习7:实现 toast 插件
    const ToastPlugin = {
      install(app: App) {
        // 实现 toast 插件
      }
    }
    

实战练习

  1. 状态管理库

    • 实现简化版 Pinia
    • 支持持久化存储
    • 实现插件系统
  2. 组件通信

    • 实现 provide/inject 通信
    • 实现事件总线
    • 实现状态共享

🎯 第4章:路由与状态管理

基础练习

  1. 路由配置

    // 练习1:配置嵌套路由
    const routes = [
      {
        path: '/dashboard',
        component: DashboardLayout,
        children: [
          { path: '', component: DashboardHome },
          { path: 'profile', component: Profile },
          { path: 'settings', component: Settings }
        ]
      }
    ]
    
  2. 状态管理

    // 练习2:实现用户 store
    export const useUserStore = defineStore('user', () => {
      const user = ref<User | null>(null)
      const isLoggedIn = computed(() => !!user.value)
      
      const login = async (credentials: LoginCredentials) => {
        // 实现登录逻辑
      }
      
      return { user, isLoggedIn, login }
    })
    

进阶练习

  1. 路由守卫

    // 练习3:实现权限守卫
    router.beforeEach((to, from, next) => {
      const userStore = useUserStore()
      
      if (to.meta.requiresAuth && !userStore.isLoggedIn) {
        next('/login')
      } else {
        next()
      }
    })
    
  2. 状态持久化

    // 练习4:实现状态持久化
    const usePersistedStore = defineStore('persisted', () => {
      const state = ref(JSON.parse(localStorage.getItem('state') || '{}'))
      
      watch(state, (newState) => {
        localStorage.setItem('state', JSON.stringify(newState))
      }, { deep: true })
      
      return { state }
    })
    

实战练习

  1. 权限管理系统

    • 实现基于角色的权限控制
    • 支持动态路由生成
    • 实现权限验证中间件
  2. 数据缓存策略

    • 实现 API 数据缓存
    • 支持缓存失效策略
    • 实现离线数据同步

🎯 第5章:工程化与性能

基础练习

  1. 构建优化

    // 练习1:配置 Vite 构建优化
    export default defineConfig({
      build: {
        rollupOptions: {
          output: {
            manualChunks: {
              vendor: ['vue', 'vue-router', 'pinia'],
              ui: ['element-plus']
            }
          }
        }
      }
    })
    
  2. 图片优化

    // 练习2:实现图片懒加载
    const useLazyImage = (src: string) => {
      const imageRef = ref<HTMLImageElement>()
      const loaded = ref(false)
      
      onMounted(() => {
        const observer = new IntersectionObserver((entries) => {
          entries.forEach(entry => {
            if (entry.isIntersecting) {
              // 加载图片
            }
          })
        })
        
        if (imageRef.value) {
          observer.observe(imageRef.value)
        }
      })
      
      return { imageRef, loaded }
    }
    

进阶练习

  1. 性能监控

    // 练习3:实现性能监控
    const usePerformanceMonitor = () => {
      const measurePerformance = (name: string, fn: Function) => {
        const start = performance.now()
        const result = fn()
        const end = performance.now()
        
        console.log(`${name} took ${end - start} milliseconds`)
        return result
      }
      
      return { measurePerformance }
    }
    
  2. 错误边界

    <!-- 练习4:实现错误边界组件 -->
    <template>
      <div v-if="hasError" class="error-boundary">
        <h2>Something went wrong</h2>
        <button @click="retry">Retry</button>
      </div>
      <slot v-else />
    </template>
    
    <script setup lang="ts">
    const hasError = ref(false)
    
    const retry = () => {
      hasError.value = false
    }
    
    onErrorCaptured((error) => {
      hasError.value = true
      console.error('Error caught by boundary:', error)
      return false
    })
    </script>
    

实战练习

  1. 性能优化工具

    • 实现性能分析工具
    • 支持性能报告生成
    • 实现性能建议系统
  2. 监控系统

    • 实现错误监控
    • 支持性能指标收集
    • 实现告警系统

🎯 第6章:测试与质量

基础练习

  1. 单元测试

    // 练习1:测试工具函数
    describe('formatDate', () => {
      it('should format date correctly', () => {
        const date = new Date('2024-01-01')
        expect(formatDate(date)).toBe('2024/1/1')
      })
    })
    
    // 练习2:测试组合式函数
    describe('useCounter', () => {
      it('should increment counter', () => {
        const { count, increment } = useCounter()
        increment()
        expect(count.value).toBe(1)
      })
    })
    
  2. 组件测试

    // 练习3:测试 Vue 组件
    describe('Button', () => {
      it('should render correctly', () => {
        const wrapper = mount(Button, {
          props: { type: 'primary' },
          slots: { default: 'Click me' }
        })
        
        expect(wrapper.text()).toBe('Click me')
        expect(wrapper.classes()).toContain('btn-primary')
      })
    })
    

进阶练习

  1. E2E 测试

    // 练习4:测试用户流程
    test('user can login and view dashboard', async ({ page }) => {
      await page.goto('/login')
      await page.fill('[data-testid="email"]', 'test@example.com')
      await page.fill('[data-testid="password"]', 'password')
      await page.click('[data-testid="login-button"]')
      
      await expect(page).toHaveURL('/dashboard')
      await expect(page.locator('[data-testid="welcome-message"]')).toBeVisible()
    })
    
  2. 测试覆盖率

    // 练习5:配置测试覆盖率
    export default defineConfig({
      test: {
        coverage: {
          provider: 'v8',
          reporter: ['text', 'json', 'html'],
          thresholds: {
            global: {
              branches: 80,
              functions: 80,
              lines: 80,
              statements: 80
            }
          }
        }
      }
    })
    

实战练习

  1. 测试工具开发

    • 实现测试工具函数库
    • 支持组件测试辅助函数
    • 实现测试数据生成器
  2. 质量保证流程

    • 实现自动化测试流程
    • 支持测试报告生成
    • 实现质量门禁

🎯 第7章:CSS 进阶专题

基础练习

  1. 设计令牌系统

    /* 练习1:实现设计令牌 */
    :root {
      --color-primary-50: #eff6ff;
      --color-primary-100: #dbeafe;
      --color-primary-500: #3b82f6;
      --color-primary-900: #1e3a8a;
      
      --spacing-xs: 0.25rem;
      --spacing-sm: 0.5rem;
      --spacing-md: 1rem;
      --spacing-lg: 1.5rem;
      --spacing-xl: 2rem;
    }
    
  2. 容器查询

    /* 练习2:实现响应式卡片 */
    .card {
      container-type: inline-size;
      display: grid;
      gap: 1rem;
    }
    
    @container (min-width: 400px) {
      .card {
        grid-template-columns: 1fr 2fr;
      }
    }
    

进阶练习

  1. 动画系统

    /* 练习3:实现动画系统 */
    .animate-fade-in {
      animation: fadeIn 0.3s ease-out;
    }
    
    .animate-slide-up {
      animation: slideUp 0.3s ease-out;
    }
    
    .animate-scale {
      animation: scale 0.2s ease-out;
    }
    
    @keyframes fadeIn {
      from { opacity: 0; }
      to { opacity: 1; }
    }
    
    @keyframes slideUp {
      from { transform: translateY(20px); opacity: 0; }
      to { transform: translateY(0); opacity: 1; }
    }
    
    @keyframes scale {
      from { transform: scale(0.95); }
      to { transform: scale(1); }
    }
    
  2. 主题系统

    /* 练习4:实现主题系统 */
    [data-theme="light"] {
      --bg-primary: #ffffff;
      --text-primary: #1a1a1a;
      --border-primary: #e5e5e5;
    }
    
    [data-theme="dark"] {
      --bg-primary: #1a1a1a;
      --text-primary: #ffffff;
      --border-primary: #404040;
    }
    
    .theme-toggle {
      background: var(--bg-primary);
      color: var(--text-primary);
      border: 1px solid var(--border-primary);
    }
    

实战练习

  1. 组件库设计

    • 设计完整的 CSS 组件库
    • 实现主题切换功能
    • 支持自定义样式
  2. 动画库开发

    • 实现动画库
    • 支持动画组合
    • 实现性能优化

🎯 第8章:项目实战A - SaaS仪表盘

基础练习

  1. 项目搭建

    • 创建 Vue3 + TypeScript 项目
    • 配置开发环境
    • 实现基础布局
  2. 组件开发

    • 实现基础 UI 组件
    • 实现表单组件
    • 实现数据展示组件

进阶练习

  1. 状态管理

    • 实现用户状态管理
    • 实现应用状态管理
    • 实现数据缓存
  2. 路由配置

    • 实现路由配置
    • 实现路由守卫
    • 实现动态路由

实战练习

  1. 完整功能实现

    • 实现用户认证
    • 实现数据管理
    • 实现权限控制
  2. 性能优化

    • 实现代码分割
    • 实现懒加载
    • 实现缓存策略

🎯 第9章:项目实战B - 内容社区

基础练习

  1. Nuxt3 项目搭建

    • 创建 Nuxt3 项目
    • 配置数据库
    • 实现基础功能
  2. 内容管理

    • 实现文章发布
    • 实现内容编辑
    • 实现内容展示

进阶练习

  1. SEO 优化

    • 实现元数据管理
    • 实现结构化数据
    • 实现性能优化
  2. 社交功能

    • 实现用户关注
    • 实现内容互动
    • 实现消息系统

实战练习

  1. 完整社区功能

    • 实现用户系统
    • 实现内容系统
    • 实现社交功能
  2. 部署优化

    • 实现 SSR 优化
    • 实现 CDN 配置
    • 实现监控系统

🎯 第10章:Vue 内核深入

基础练习

  1. 响应式系统

    • 实现简化版响应式系统
    • 理解依赖收集机制
    • 实现计算属性
  2. 虚拟 DOM

    • 实现简化版虚拟 DOM
    • 理解 diff 算法
    • 实现组件更新

进阶练习

  1. 编译器

    • 实现模板编译器
    • 理解 AST 转换
    • 实现代码生成
  2. 渲染器

    • 实现自定义渲染器
    • 支持多平台渲染
    • 实现性能优化

实战练习

  1. 框架开发

    • 实现简化版 Vue 框架
    • 支持组件系统
    • 实现响应式系统
  2. 工具开发

    • 实现开发工具
    • 支持调试功能
    • 实现性能分析

🎯 第11章:微前端与部署

基础练习

  1. 微前端架构

    • 实现 Module Federation
    • 配置子应用
    • 实现应用通信
  2. 部署配置

    • 配置 CI/CD
    • 实现自动化部署
    • 配置监控系统

进阶练习

  1. 性能优化

    • 实现代码分割
    • 实现缓存策略
    • 实现性能监控
  2. 安全防护

    • 实现 XSS 防护
    • 实现 CSRF 防护
    • 实现内容安全策略

实战练习

  1. 微前端平台

    • 实现微前端平台
    • 支持应用管理
    • 实现监控系统
  2. DevOps 流程

    • 实现完整 DevOps 流程
    • 支持多环境部署
    • 实现自动化测试

🎯 综合挑战

挑战1:全栈应用开发

  • 使用 Vue3 + TypeScript + Nuxt3
  • 实现完整的用户系统
  • 支持实时通信
  • 实现移动端适配

挑战2:组件库开发

  • 设计完整的组件库
  • 支持主题切换
  • 实现无障碍访问
  • 支持多语言

挑战3:性能优化专家

  • 实现性能监控系统
  • 优化加载性能
  • 实现缓存策略
  • 支持离线功能

挑战4:架构设计大师

  • 设计微前端架构
  • 实现状态管理
  • 支持插件系统
  • 实现监控告警

📝 练习提交

提交要求

  1. 每个练习需要提供完整的代码实现
  2. 包含必要的测试用例
  3. 提供详细的使用说明
  4. 记录学习心得和遇到的问题

评分标准

  • 代码质量:代码规范、可读性、可维护性
  • 功能实现:功能完整性、正确性
  • 创新性:解决方案的创新性
  • 文档质量:文档的完整性和清晰度

学习建议

  1. 按照章节顺序完成练习
  2. 每个练习都要动手实践
  3. 遇到问题及时查阅文档
  4. 与其他学习者交流讨论
  5. 定期回顾和总结

🔗 相关资源

  • Vue 3 官方文档
  • TypeScript 官方文档
  • MDN Web 文档
  • CSS Tricks
  • Web.dev
Prev
附录A:代码片段库