您现在的位置是:首页 >技术杂谈 >Vue3(2)网站首页技术杂谈

Vue3(2)

ZzXxYy_99 2026-07-07 00:01:05
简介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的替代品

  1. 提供更加简单的API(去掉了mutation)
  2. 提供符合,组合式风格的API(和Vue3新语法统一)
  3. 去掉了modules的概念,每一个store都是一个独立的模块
  4. 配合TypeScript更加友好,提供可靠的类型推断

三、手动添加Pinia到Vue项目

在实际开发项目的时候,关于Pinia的配置,可以在项目创建时自动添加

步骤 :

  1. 使用Vite创建一个空的Vue3项目  npm create vue@latest
  2. 按照官方文档安装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

  1. 单引号
  2. 不使用分号
  3. 宽度80字符
  4. 不加对象|数组最后逗号
  5. 换行符号不限制(win mac不一致)

(2)vue组件名称多单词组成(忽略index.vue)

(3)props解构(关闭)

3、配置代码检测工作流

(1)提交前做代码检测

  1. 初始化git仓库,执行git init即可
  2. 初始化husky工具配置,执行pnpm dlx husky-init&&pnpm install即可https://typicode.github.io/husky/
  3. 修改.husky/pre-commit文件
-npm test
+pnpm lint

(2)暂存区eslint校验

  1. 安装lint-staged包pnpm i lint-staged-D
  2. package.json配置lint-staged命令
  3. .husky/pre-commit文件修改

4、目录调整

默认生成的目录结构不满足我们的开发需求,所以这里需要做一些自定义改动

主要是一下工作:

  1. 删除一些初始化的默认文件
  2. 修改剩余代码内容
  3. 新增调整我们需要的目录结构
  4. 拷贝全局样式和图片,安装预处理支持

5、vue-router4路由代码解析

路由初始化

(1)创建路由实例由createRouter

(2)路由模式

  1. history模式使用createWebHistory()
  2. hash模式使用createWebHashHistory()
  3. 参数是基础路径,默认/

6、引入Element Plus组件库

(1)安装: pnpm sdd element-plus

(2)配置按需导入:

         官方文档:https://element-plus.org/zh-CN/guide/quickstart.html

(3)直接使用组件

7、Pinia构建仓库和持久化

pinia独立维护

仓库统一导出

8、数据交互-请求工具设计

9、整体路由设计

  登录  一级路由

  架子  一级路由

  文章分类 二级路由

  文章管理 二级路由

  基本资料 二级路由

  更换头像 二级路由

  重置密码 二级路由

约定路由规则:

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。