【 Vue3 + Vite + setup语法糖 + Pinia + VueRouter + Element Plus 第一篇】(持续更新中)

本文介绍了如何使用Vite创建Vue3项目,配置网络访问,引入并使用ElementPlus库,以及Vue3中的setup语法糖、响应式数据和生命周期函数。同时展示了如何使用ElementPlus的Message组件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【 Vue3 + Vite + setup语法糖 + Pinia + VueRouter + Element Plus 第一篇】(持续更新中)

1.使用 Vite脚手架创建 Vue3 项目
  1. 终端输入命令 npm create vite 项目名
  2. 选择 Vue项目并回车
  3. 根据自己的爱好,选择配置即可

在这里插入图片描述

2. 开启 Network 访问地址

npm run dev后 提示 use --host to expose
则需要对vite.config.js进行配置

// vite.config.js
export default defineConfig({
  plugins: [vue()],
  server:{
		host:'0.0.0.0'
	}
})
// package.json
"scripts": {
  // 添加 --host
  "dev": "vite --host",
}
3. 引入并使用 Element Plus

Element Plus 官网

安装依赖包 npm install element-plus --save

main.js 中引入

import { createApp } from 'vue'
import './style.css'
import App from './App.vue'

import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
// 中文 如需其他语言请引入其他包
import zhCn from 'element-plus/dist/locale/zh-cn.mjs'

createApp(App).use(ElementPlus, { locale: zhCn })
4. Vue3 常用生命周期函数 && 响应式数据

Vue3 不同于 Vue2
生命周期函数 和 响应式数据 都需要借用 辅助函数

Vue3 方法和响应式数据

<el-button type="primary" @click="btnSure">{{num}}</el-button>
// 使用 setup 语法糖,可以加快开发效率,不需要再对 数据、方法进行导出
setup(){
 // ref 使基本数据类型数据具备响应式
 // onMounted 相当于 Vue2 中的 created 函数,用于组件初始化完成
 // onUnmounted 相当于 Vue2 中的 destoryed 函数,用于组件销毁
 // defineComponent 相当于Vue2中的 Component 用于注册组件
 import { ref, onMounted,onUnmounted ,defineComponent} from 'vue'
 
 // 这里相当于 Vue2 中的 data
 const num = 1
 // 这里相当于 Vue2 中的 methods
 const btnSure = () => {
  // 这样写你会发现数据变了,但是视图没有更新
  num = num ++
 }
 
 // Vue3 应该这样写
 const num = ref(1) // 使数据成为响应式
 const btnSure = () => {
  num.value = num.value + 1 // 响应式数据需要使用.value来获取值,但是在template模板中不需要
 }
}

注册并使用组件

import headerComponent from '@/components/header.vue' // 引入头部组件
import { defineComponent } from 'vue' // 引入注册组件辅助函数

/**
 * @type component
 * @description 在此注册组件
 * **/

const Component = defineComponent({
  headerComponent
})

<headerComponent />  // 直接使用即可

生命周期函数

import { onMounted } from 'vue' // 引入生命周期函数

/**
 * @type 生命周期
 * @description 所有生命周期函数都在此体现
 * **/

onMounted(() => {
  initTable()
})

const initTable = () =>{
 console.log('Vue3生命周期函数调用方法')
}

4.使用 Element Plus Message 消息提示
// 局部导入 ElMessage 弹窗组件
import { ElMessage } from 'element-plus'
// 使用
ElMessage.success('获取成功')
### 项目布局实现 以下是基于 ViteVue3PiniaVue-Router@4、TypeScript 和 `setup` 语法构建项目的具体方法: #### 1. 初始化项目并安装依赖 通过 Vite 创建一个新的 Vue3 项目,并指定 TypeScript 支持: ```bash npm create vite@latest my-project --template vue-ts cd my-project ``` 随后,安装必要的依赖项,包括 Vue Router v4 和 Pinia: ```bash npm install vue-router@4 pinia element-plus axios ``` #### 2. 配置 Element Plus 的按需加载 为了优化打包体积,推荐使用插件来实现 Element Plus 的按需导入。可以安装 `unplugin-vue-components` 和 `unplugin-auto-import` 插件: ```bash npm install unplugin-vue-components unplugin-auto-import -D ``` 在 `vite.config.ts` 中配置这些插件: ```typescript import { defineConfig } from &#39;vite&#39; import vue from &#39;@vitejs/plugin-vue&#39; import AutoImport from &#39;unplugin-auto-import/vite&#39; import Components from &#39;unplugin-vue-components/vite&#39; import { ElementPlusResolver } from &#39;unplugin-vue-components/resolvers&#39; export default defineConfig({ plugins: [ vue(), AutoImport({ resolvers: [ElementPlusResolver()], }), Components({ resolvers: [ElementPlusResolver()], }), ], }) ``` 这一步实现了 Element Plus 组件和 API 的自动导入[^1]。 #### 3. 设置路由管理器 创建 `src/router/index.ts` 文件以定义路由逻辑: ```typescript import { createRouter, createWebHistory } from &#39;vue-router&#39;; import routes from &#39;./routes&#39;; const router = createRouter({ history: createWebHistory(), routes, }); // 路由守卫:验证用户身份 router.beforeEach((to, from, next) => { const token = localStorage.getItem(&#39;token&#39;); const isAuthenticated = !!token; if (to.name === &#39;login&#39;) { localStorage.clear(); } if (to.name !== &#39;login&#39; && !isAuthenticated) { next({ name: &#39;login&#39; }); } else { next(); } }); export default router; ``` 同时,在同一目录下创建 `routes.ts` 定义具体的路由映射表: ```typescript import { RouteRecordRaw } from &#39;vue-router&#39;; const routes: Array<RouteRecordRaw> = [ { path: &#39;/&#39;, component: () => import(&#39;@/views/Home.vue&#39;), name: &#39;home&#39; }, { path: &#39;/login&#39;, component: () => import(&#39;@/views/Login.vue&#39;), name: &#39;login&#39; }, ]; export default routes; ``` #### 4. 整合状态管理工具 Pinia 初始化 Pinia 并将其挂载至应用实例中。编辑 `src/main.ts` 文件如下: ```typescript import { createApp } from &#39;vue&#39;; import App from &#39;./App.vue&#39;; import router from &#39;./router&#39;; import pinia from &#39;./stores&#39;; // 引入 Pinia 实例 import &#39;element-plus/dist/index.css&#39;; const app = createApp(App); app.use(pinia); app.use(router); app.mount(&#39;#app&#39;); ``` 接着,在 `src/stores/` 下创建存储模块文件(如 `userStore.ts`),用于管理全局状态: ```typescript import { defineStore } from &#39;pinia&#39;; export const useUserStore = defineStore(&#39;user&#39;, { state: () => ({ username: &#39;&#39;, isLoggedIn: false, }), actions: { login(username: string) { this.username = username; this.isLoggedIn = true; }, logout() { this.username = &#39;&#39;; this.isLoggedIn = false; }, }, }); ``` #### 5. 构建基础布局结构 修改 `src/App.vue` 来支持动态视图渲染以及顶部导航栏等功能: ```html <template> <div id="app"> <!-- 导航 --> <nav-bar /> <!-- 动态内容区域 --> <router-view></router-view> <!-- 底部版权信息 --> <footer-component /> </div> </template> <script setup lang="ts"> import NavBar from &#39;@/components/NavBar.vue&#39;; import FooterComponent from &#39;@/components/Footer.vue&#39;; </script> ``` #### 6. 在组件中使用路由与状态管理功能 假设有一个按钮点击事件触发跳转或者更新状态的操作,可以在任何组件内部这样写: ```typescript <script setup lang="ts"> import { useRouter, useRoute } from &#39;vue-router&#39;; import { useUserStore } from &#39;@/stores/userStore&#39;; const userStore = useUserStore(); const router = useRouter(); function handleLoginClick() { userStore.login(&#39;John Doe&#39;); // 更新 Pinia 状态 router.push(&#39;/dashboard&#39;); // 执行页面跳转 } </script> ``` 以上即完成了整个基于 ViteVue3PiniaVue-Router@4、TypeScript 及 Setup 语法的项目布局设计[^2]。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端大斗师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值