【前端框架】Vue3合集

一、Vue3初识

1、create-vue

create-vue是Vue官方新的脚手架工具,底层切换到了 vite (下一代前端工具链),为开发提供极速响应

【前端框架】Vue3合集_第1张图片

前置条件:16.0或更高版本的Node.js

安装并执行 create-vue

npm init vue@latest

【前端框架】Vue3合集_第2张图片

2、项目目录和关键文件

【前端框架】Vue3合集_第3张图片

二、组合式API

1、setup选项

执行时机:在beforeCreate钩子之前执行

setup函数中,不能获取this

【前端框架】Vue3合集_第4张图片

在setup函数中写的数据和方法需要在末尾以对象的方式return,才能给模版使用


2、setup语法糖

script标签添加 setup标记,不需要再写导出语句,默认会添加导出语句


3、reactive和ref函数

1)reactive

接受对象类型数据的参数传入并返回一个响应式的对象




2)ref

(常用)

接收简单类型或者对象类型的数据传入并返回一个响应式的对象

本质:在原有传入数据的基础上,包成了对象




4、computed

计算属性基本思想和Vue2保持一致,组合式API下的计算属性只是修改了API写法


  1. 计算属性中不应该有“副作用”(异步请求/修改dom => watch)
  2. 避免直接修改计算属性的值

5、watch

1)侦听单个数据
// 1. 导入watch
import { ref, watch } from 'vue'
const count = ref(0)

// 2. 调用watch 侦听变化
watch(count, (newValue, oldValue) => {
    console.log(`count发生了变化,老值为${oldValue},新值为${newValue}`)
})
2)侦听多个数据
// 1. 导入watch
import { ref, watch } from 'vue'
const count = ref(0)
const name = ref('cp')

// 2. 调用watch 侦听变化
watch([count, name], ([newCount, newName],[oldCount,oldName]) => {
    console.log(`count或者name变化了,[newCount, newName],[oldCount,oldName]`)
})
3)immediate

在侦听器创建时立即触发回调,响应式数据变化之后继续执行回调

// 1. 导入watch
import { ref, watch } from 'vue'
const count = ref(0)

// 2. 调用watch 侦听变化
watch(count, (newValue, oldValue) => {
    console.log(`count发生了变化,老值为${oldValue},新值为${newValue}`)
},{
    immediate: true
})
4)deep

通过watch监听的ref对象默认是浅层侦听的,直接修改嵌套的对象属性不会触发回调执行,需要开启deep深度监听

// 1. 导入watch
import { ref, watch } from 'vue'
const state = ref({ count: 0 })

// 2. 监听对象state 并开启deep
watch(state, () => {
    console.log('数据变化了')
},{
    deep:true
})
const changeStateByCount = () => {
    // 此时修改可以触发回调
    state.value.count++
}

6、生命周期函数

【前端框架】Vue3合集_第5张图片

7、父子通信

1)父传子
  1. 父组件中给子组件标签通过@绑定事件
  2. 子组件内部通过 emit 方法触发事件

【前端框架】Vue3合集_第6张图片

2)子传父
  1. 父组件中给子组件标签通过@绑定事件
  2. 子组件内部通过 emit 方法触发事件

【前端框架】Vue3合集_第7张图片

8、模版引用

  1. 调用ref函数生成一个ref对象
  2. 通过ref标识绑定ref对象到标签



默认情况下在

9、跨层组件通信

顶层组件向任意的底层组件传递数据和方法,实现跨层组件通信

1)跨层传递普通数据
  1. 顶层组件通过 provide 函数提供数据
  2. 底层组件通过 inject 函数提供数据

【前端框架】Vue3合集_第8张图片

2)跨层传递响应式数据

【前端框架】Vue3合集_第9张图片

3)跨层传递方法

顶层组件可以向底层组件传递方法,底层组件调用方法修改顶层组件的数据

【前端框架】Vue3合集_第10张图片

三、Vue3.3 新特性

1、defineOptions

背景说明:

2、defineModel

在Vue3中,自定义组件上使用v-model, 相当于传递一个modelValue属性,同时触发 update:modelValue 事件

【前端框架】Vue3合集_第11张图片

我们需要先定义 props,再定义 emits。其中有许多重复的代码。如果需要修改此值,还需要手动调用 emit 函数。









生效需要配置 vite.config.js

import { fileURLToPath, URL } from 'node:url'

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [
    vue({
      script: {
        defineModel: true
      }
    }),
  ],
  resolve: {
    alias: {
      '@': fileURLToPath(new URL('./src', import.meta.url))
    }
  }
})

四、Pinia

1、Pinia概述

Pinia 是 Vue 的专属的最新状态管理库 ,是 Vuex 状态管理工具的替代品

【前端框架】Vue3合集_第12张图片

2、添加Pinia到Vue项目

  1. 使用 Vite 创建一个空的 Vue3项目
npm init vite@latest
  1. 按照官方文档安装 pinia 到项目中

3、 Pinia基础使用

【前端框架】Vue3合集_第13张图片

4、getters实现

Pinia中的 getters 直接使用 computed函数 进行模拟, 组件中需要使用需要把 getters return出去

5、action异步实现

异步action函数的写法和组件中获取异步数据的写法完全一致

6、storeToRefs工具函数

使用storeToRefs函数可以辅助保持数据(state + getter)的响应式解构
【前端框架】Vue3合集_第14张图片

7、Pinia的调试

Vue官方的 dev-tools 调试工具 对 Pinia直接支持,可以直接进行调试

8、Pinia持久化插件

官方文档:https://prazdevs.github.io/pinia-plugin-persistedstate/zh/

  1. 安装插件 pinia-plugin-persistedstate
npm i pinia-plugin-persistedstate
  1. 使用 main.js
import persist from 'pinia-plugin-persistedstate'
...
app.use(createPinia().use(persist))
  1. 配置 store/counter.js
import { defineStore } from 'pinia'
import { computed, ref } from 'vue'

export const useCounterStore = defineStore('counter', () => {
  ...
  return {
    count,
    doubleCount,
    increment
  }
}, {
  persist: true
})
  1. 其他配置,看官网文档即可

你可能感兴趣的:(前端框架)