您现在的位置是:首页 >技术杂谈 >Vue3(2)网站首页技术杂谈
Vue3(2)
一、新特性
1、defineOptions
(1)背景说明:有<script setup>之前,如果要定义props,emits可以轻而易举地添加一个与setup平级的属性。但是用了<script setup>后,就无法这么做setup属性已经没有了,自然无法添加与其平级的属性
(2)所以在vue3.3中新引入了defineOptions宏。顾名思义,主要是用来定义Options API的选项。可以用defineOptions定义任意的选项,props,emits,expose,slots除外

2、defineModel
在Vue3中,自定义组件上使用v-model,相对于传递一个modelValue属性,同时触发 update:modelValue事件
<Child v-model="isVisible">
//相对于
<Child :modelValue="isVisible" @update:modelValue="isVisible=$event">
我们需要先定义props,再定义emits。其中有许多重复的代码。如果需要修改此值,还需要手动调用emit函数

二、pinia
Pinia是Vue的最新状态管理工具,是Vuex的替代品
- 提供更加简单的API(去掉了mutation)
- 提供符合,组合式风格的API(和Vue3新语法统一)
- 去掉了modules的概念,每一个store都是一个独立的模块
- 配合TypeScript更加友好,提供可靠的类型推断
三、手动添加Pinia到Vue项目
在实际开发项目的时候,关于Pinia的配置,可以在项目创建时自动添加
步骤 :
- 使用Vite创建一个空的Vue3项目 npm create vue@latest
- 按照官方文档安装pinia到项目中

四、Pinia基本语法
1、定义store
Store是用defineStore定义的,它的第一个参数要求是一个独一无二的名字
import(defineStore)from'pinia'
//你可以对'defineStore()'的返回值进行任意命名,但最好使用store的名字,同时以'use'
//第一个参数是你的应用中'Store'的唯一ID
export const useAlertsStore = defineStore('alerts',(
//其他配置...
))
这个名字,也被用作Id,是必须传入的,Pinia将它用来连接store和devtools。为了养成习惯性的用法,将返回的函数名命名为use...是一个符合组合式函数风格的约定。
defineStore() 的第二个参数 可接受两类值:Setup函数或Option对象。
2、Option Store
与Vue的选项式API类似,我们也可以传入一个带有state、actions与getters属性的Option对象
export const useCounterStore = defineStore('counter',{
state: ()=>({count:0}),
getters:{
double:(state)=>state.count*2,
},
actions:{
increment(){
this.count++
},
},
})
3、Setup Store
也存在另一种定义store的可用语法。与Vue组合式API的setup函数相似,我们可以传入一个函数,该函数定义了一些响应式属性和方法,并且返回一个带有我们想暴露出去的属性和方法的对象。
export const useCountStore = defineStore('counter',()=>{
const count = ref(0)
function increment(){
count.value++
}
return{count,increment}
})
在Setup Store中:
- ref()就是state属性
- computed()就是getters
- function()就是actions
五、action异步写法
(1)编写方式:异步action函数的写法和组件中获取异步数据的写法完全一致
(2)接口地址:http://geek.itheima.net/v1_0/channels
(3)需求:在Pinia中获取频道列表数据并把数据渲染APP组件的模板中

六、Pinia持久化插件
1、安装插件pinia-plugin-persistedstate
2、main.js使用
3、store仓库中,persist:true开启
七、Vue3大事件项目
1、pnpm创建项目
优势:比同类工具快2倍左右、节省磁盘空间...
安装方式: npm install-g pnpm
创建项目:pnpm create vue

2、Eslint配置代码风格
配置文件.eslintrc.cjs
(1)prettier风格配置https://prettier.io
- 单引号
- 不使用分号
- 宽度80字符
- 不加对象|数组最后逗号
- 换行符号不限制(win mac不一致)
(2)vue组件名称多单词组成(忽略index.vue)
(3)props解构(关闭)

3、配置代码检测工作流
(1)提交前做代码检测
- 初始化git仓库,执行git init即可
- 初始化husky工具配置,执行pnpm dlx husky-init&&pnpm install即可https://typicode.github.io/husky/
- 修改.husky/pre-commit文件
-npm test
+pnpm lint
(2)暂存区eslint校验
- 安装lint-staged包pnpm i lint-staged-D
- package.json配置lint-staged命令
- .husky/pre-commit文件修改

4、目录调整
默认生成的目录结构不满足我们的开发需求,所以这里需要做一些自定义改动
主要是一下工作:
- 删除一些初始化的默认文件
- 修改剩余代码内容
- 新增调整我们需要的目录结构
- 拷贝全局样式和图片,安装预处理支持
5、vue-router4路由代码解析
路由初始化

(1)创建路由实例由createRouter
(2)路由模式
- history模式使用createWebHistory()
- hash模式使用createWebHashHistory()
- 参数是基础路径,默认/
6、引入Element Plus组件库
(1)安装: pnpm sdd element-plus
(2)配置按需导入:
官方文档:https://element-plus.org/zh-CN/guide/quickstart.html
(3)直接使用组件

7、Pinia构建仓库和持久化

pinia独立维护
仓库统一导出
8、数据交互-请求工具设计

9、整体路由设计
登录 一级路由
架子 一级路由
文章分类 二级路由
文章管理 二级路由
基本资料 二级路由
更换头像 二级路由
重置密码 二级路由
约定路由规则:






QT多线程的5种用法,通过使用线程解决UI主界面的耗时操作代码,防止界面卡死。...
U8W/U8W-Mini使用与常见问题解决
stm32使用HAL库配置串口中断收发数据(保姆级教程)
分享几个国内免费的ChatGPT镜像网址(亲测有效)
Allegro16.6差分等长设置及走线总结