Vue 3 Composition API 实战:构建高性能后台管理系统

码匠1小时前VUE30

Vue 3 的 Composition API 带来了全新的开发体验,特别适合构建大型后台管理系统。这篇文章分享我使用 Vue 3 + Composition API 开发企业级后台的实战经验。

一、为什么选择 Composition API?

相比 Options API,Composition API 在大型项目中优势明显:

  • 更好的代码组织 - 相关逻辑可以放在一起

  • 更好的类型推断 - TypeScript 支持更完善

  • 更好的复用性 - 逻辑抽取为 composable 函数

  • 更好的性能 - 树摇优化更彻底

二、项目架构设计

// 推荐的目录结构
src/
├── api/           # API 接口
├── assets/        # 静态资源
├── components/    # 公共组件
├── composables/   # 组合式函数
├── layouts/       # 布局组件
├── router/        # 路由配置
├── stores/        # Pinia 状态管理
├── utils/         # 工具函数
└── views/         # 页面视图

三、核心 Composable 封装

1. 表格数据管理 useTable

import { ref, computed } from 'vue'

export function useTable(fetchFn) {
  const loading = ref(false)
  const data = ref([])
  const pagination = ref({
    current: 1,
    pageSize: 10,
    total: 0
  })
  
  const fetchData = async () => {
    loading.value = true
    try {
      const res = await fetchFn({
        page: pagination.value.current,
        pageSize: pagination.value.pageSize
      })
      data.value = res.list
      pagination.value.total = res.total
    } finally {
      loading.value = false
    }
  }
  
  const handlePageChange = (page) => {
    pagination.value.current = page
    fetchData()
  }
  
  return {
    loading,
    data,
    pagination,
    fetchData,
    handlePageChange
  }
}

2. 表单管理 useForm

export function useForm(options = {}) {
  const { initialValues = {}, onSubmit, onReset } = options
  
  const form = ref({ ...initialValues })
  const loading = ref(false)
  const errors = ref({})
  
  const submit = async () => {
    loading.value = true
    errors.value = {}
    try {
      await onSubmit?.(form.value)
    } catch (e) {
      errors.value = e.errors || {}
    } finally {
      loading.value = false
    }
  }
  
  const reset = () => {
    form.value = { ...initialValues }
    errors.value = {}
    onReset?.()
  }
  
  return {
    form,
    loading,
    errors,
    submit,
    reset
  }
}

四、性能优化技巧

1. 组件懒加载

// 路由懒加载
const routes = [
  {
    path: '/dashboard',
    component: () => import('@/views/Dashboard.vue')
  }
]

// 组件异步加载
const AsyncComponent = defineAsyncComponent(() => 
  import('./HeavyComponent.vue')
)

2. 虚拟滚动

大数据列表使用虚拟滚动,只渲染可视区域:

<RecycleScroller
  class="scroller"
  :items="list"
  :item-size="50"
  key-field="id"
>
  <template #default="{ item }">
    <div class="item">{{ item.name }}</div>
  </template>
</RecycleScroller>

3. 缓存策略

// 组件级缓存
<KeepAlive :include="['Dashboard', 'UserList']">
  <component :is="currentComponent" />
</KeepAlive>

// 数据缓存
const { data } = useQuery({
  queryKey: ['users'],
  queryFn: fetchUsers,
  staleTime: 5 * 60 * 1000  // 5分钟缓存
})

五、TypeScript 最佳实践

// 定义 Props 类型
interface TableProps {
  columns: Column[]
  dataSource: Record[]
  loading?: boolean
  pagination?: PaginationConfig
}

// 定义 Emits 类型
const emit = defineEmits()

// 定义 Ref 类型
const tableRef = ref| null>(null)

六、总结

Vue 3 Composition API 让大型项目的代码组织更加清晰,配合 TypeScript 和合理的架构设计,可以构建出高性能、易维护的企业级应用。

关键点回顾:

  1. 使用 Composable 封装可复用逻辑

  2. 合理设计项目目录结构

  3. 重视性能优化(懒加载、虚拟滚动、缓存)

  4. TypeScript 提升代码质量


关于我们

如果你在 Vue 3 开发中需要帮助,或者需要专业的技术团队支持,尊云科技可以为你提供服务。

我们专注于 Vue.js 前端开发、后台管理系统开发、小程序开发、API 接口开发,拥有丰富的企业级项目经验。

服务范围:

  • Vue 3 / Vue 2 项目开发与重构

  • 后台管理系统(Admin Dashboard)定制开发

  • 小程序开发(微信/支付宝/百度)

  • 前端性能优化与架构升级

  • API 接口设计与开发

联系方式:

有 Vue 开发需求,欢迎联系!

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。