当前位置: 首页 > news >正文

Vue3 通用框架结构

下面是一个基于 Vue3 的通用框架结构,包含了现代 Vue 开发的最佳实践:

<template><div id="app"><router-view /></div>
</template><script setup>
import { onMounted } from 'vue'
import { useRouter } from 'vue-router'// 全局状态初始化
const router = useRouter()// 生命周期钩子
onMounted(() => {console.log('App mounted')
})
</script><style>
/* 全局样式 */
#app {font-family: Avenir, Helvetica, Arial, sans-serif;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;color: #2c3e50;
}
</style>

配套的 main.js 入口文件

import { createApp } from 'vue'
import { createPinia } from 'pinia'
import { createRouter, createWebHistory } from 'vue-router'
import App from './App.vue'// 初始化应用
const app = createApp(App)// 状态管理 (Pinia)
const pinia = createPinia()
app.use(pinia)// 路由配置
const router = createRouter({history: createWebHistory(),routes: [{ path: '/', component: () => import('./views/Home.vue') },{ path: '/about', component: () => import('./views/About.vue') }]
})
app.use(router)// 全局组件自动注册
const components = import.meta.glob('./components/*.vue', { eager: true })
Object.entries(components).forEach(([path, component]) => {const name = path.split('/').pop().replace(/\.\w+$/, '')app.component(name, component.default)
})// 挂载应用
app.mount('#app')

核心功能模块

1. 状态管理 (Pinia)

// stores/counter.js
import { defineStore } from 'pinia'export const useCounterStore = defineStore('counter', {state: () => ({count: 0}),getters: {doubleCount: (state) => state.count * 2},actions: {increment() {this.count++}}
})

2. 路由配置

// router/index.js
import { createRouter, createWebHistory } from 'vue-router'const routes = [{path: '/',name: 'Home',component: () => import('../views/Home.vue'),meta: { requiresAuth: true }},{path: '/login',name: 'Login',component: () => import('../views/Login.vue')}
]const router = createRouter({history: createWebHistory(),routes
})// 全局路由守卫
router.beforeEach((to, from, next) => {const isAuthenticated = /* 检查用户是否登录 */ falseif (to.meta.requiresAuth && !isAuthenticated) {next('/login')} else {next()}
})export default router

3. API 服务层

// api/index.js
import axios from 'axios'const api = axios.create({baseURL: import.meta.env.VITE_API_BASE_URL,timeout: 10000
})// 请求拦截器
api.interceptors.request.use(config => {const token = localStorage.getItem('token')if (token) {config.headers.Authorization = `Bearer ${token}`}return config
})// 响应拦截器
api.interceptors.response.use(response => response.data,error => {if (error.response.status === 401) {// 处理未授权}return Promise.reject(error)}
)export default api

4. 工具函数

// utils/index.js
// 防抖函数
export const debounce = (fn, delay) => {let timer = nullreturn function(...args) {if (timer) clearTimeout(timer)timer = setTimeout(() => {fn.apply(this, args)}, delay)}
}// 日期格式化
export const formatDate = (date, fmt = 'YYYY-MM-DD') => {// 实现日期格式化逻辑
}

5. 组件示例

<!-- components/BaseButton.vue -->
<template><buttonclass="base-button":class="[size, type]"@click="$emit('click')"><slot /></button>
</template><script setup>
defineProps({size: {type: String,default: 'medium',validator: value => ['small', 'medium', 'large'].includes(value)},type: {type: String,default: 'primary',validator: value => ['primary', 'secondary', 'danger'].includes(value)}
})defineEmits(['click'])
</script><style scoped>
.base-button {border: none;border-radius: 4px;cursor: pointer;transition: all 0.3s;
}.primary {background-color: #409eff;color: white;
}/* 其他样式... */
</style>

环境配置

// vite.config.js
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'export default defineConfig({plugins: [vue()],server: {port: 3000,proxy: {'/api': {target: 'http://localhost:8080',changeOrigin: true}}},resolve: {alias: {'@': '/src'}}
})

说明

  1. ​​组合式 API​​:使用

这个框架结构包含了现代 Vue3 开发的核心要素,可以根据项目需求进行扩展和调整。

http://www.lqws.cn/news/142507.html

相关文章:

  • 在 CentOS 上安装 Docker 和 Docker Compose 并配置使用国内镜像源
  • html - <mark>标签
  • 基于Docker Compose部署Java微服务项目
  • docker快速部署OS web中间件 数据库 编程应用
  • ES6中的Map与Set数据结构的简单应用
  • Python html 库用法详解
  • 【Spark征服之路-2.2-安装部署Spark(二)】
  • ajax学习手册
  • 会计 - 金融负债和权益工具
  • 腾讯云V3签名
  • Zookeeper 和 Kafka 版本与 JDK 要求
  • 从二叉树到 STL:揭开 set 容器的本质与用法
  • CIFAR10的使用
  • Vue ②-computed || watch || 指令
  • 【Algorithm】Union-Find简单介绍
  • 《区间DP》题集
  • 【十年技术演进深度解构:车载充电机(OBC)将成为新能源汽车的“能源大脑”】
  • 云计算 Linux Rocky day05【rpm、yum、history、date、du、zip、ln】
  • 智慧照明:集中控制器、单双灯控制器与智慧灯杆网关的高效协同
  • npm install 报错:npm error: ...node_modules\deasync npm error command failed
  • python入门(1)
  • AI Agent 能否理解人类的行为和决策?
  • 单锁与分布式锁
  • 【学习记录】Linux 密码破解实战
  • 【Vue】初学Vue(setup函数,数据响应式, 脚手架 )
  • Mybatis入门到精通
  • GO语言----基础类型取别名
  • 2025 Vscode插件离线下载方式
  • HOPE800系列变频器安装到快速调试的详细操作说明
  • Python-多线程