Vue学习记录(九)--- Vue3

191 阅读4分钟

为什么要学习 Vue3

  • 优势
  • 20effd7ebd0a84a549df18ad99a493f3.png
  • 40a4c3b9f0023b1fef06da6a665af3c9.png

使用 create-vue 搭建 vue3 项目

  • image.png
  • create-vue
    • create-vue 是 vue 官方最新的脚手架工具,底层是 vite
    • vue-cli 的底层是 webpack
  • 使用 create -vue 创建项目 ca8d4f4c71425ef0394320d41510e490.png-
    1. 环境条件:node.js 版本 在16.0及以上
    2. 创建一个 Vue 应用:npm init vue@latest
  • 快快快,特别快
  • 05e0761502eaee4c64e0839608a5655f.png

项目目录和关键文件

  • 301986e58501ab13bb4e575678b2e3c8.png
  • main.js 文件中的区别
    • 本质上是对创建 Vue 应用实例进行了一个封装,封装为一个函数
    • 类似还有 createRouter() createStore()
    • 2a5e281729440433e978854063fcf71c.png

组合式 api -- setup 选项

  • setup 的写法和时机
    • 21176d0c410768e2086be0828019a2dd.png
    1. 执行时机早于 beforeCreated
    2. setup 函数中获取不到 this
  • setup 选项中写代码的特点
    • setup 中提供的任何数据和函数必须 return
    • f351efaa20ddcea228c86f58c4bd00c6.png
  • 当方法和变量多了之后很麻烦,解决方法
  • 0041ce65ce4c3a6ba6e1eb3b30d51579.png

reactive 和 ref 函数

reactive()

  • 作用:
  • 接收对象类型数据参数的传入,然后返回一个响应式对象
  • 核心步骤
    • a20f55fce99c217c23512486536a5eba.png
    1. 从 vue 包中导入 reactive 函数
    2. <script setup> 中调用 reactive 函数并传入类型为对象的初始值,并使用变量接收

ref()

  • 作用:
  • 接收简单类型或者对象类型的数据并返回一个响应式的对象
  • 核心步骤
    • 11fa43e11480d629e777cc5bebf3d61a.png
    1. 从 vue 包中导入 ref 函数
    2. <script setup> 中调用 ref 函数并传入初始值,使用变量接收 ref 函数的返回值
  • 本质: 是在原有传入数据的基础上,外层包了一层对象,包成了复杂类型
  • 底层:包成复杂类型之后,再借助 reactive 实现的响应式
  • 注意:脚本中访问数据需要使用 .value,template 中访问数据不需要加(自动帮我们扒了一层)
    • 259022ca8de0a863a33b76034d2c3d8f.png

computed计算属性

  • 基本思想与 Vue2 的完全一致,组合式 api 下的计算属性只是修改了写法
  • 核心步骤
    • b869a2ca1525b8e2ca6d28f276a87b65.png
    1. 导入 computed 函数
    2. 执行函数在回调参数中 return 基于响应式数据做计算的值,用变量接收
  • 最佳实践
    1. 计算属性中不应该有‘副作用’:如异步请求、修改dom等
    2. 避免直接修改计算属性的值:计算属性应该是只读的

watch 监听函数

  • 作用:监听一个或多个数据的变化,数据变化时立即执行回调函数
  • 两个额外参数:1. immediate(立即执行) 2. deep(深度监听)

监听单个数据

  • 步骤:
    1. 导入 watch 函数
    2. 执行 watch 函数传入要监听的响应式数据 (ref对象) 和回调函数
    • b18141df4c05fc278ffae58b0969521c.png-
    • bd8d66cb18cac5b68ac31c62c5186d1c.png

监听多个数据

  • 说明:同时监听多个响应式数据的变化,不管哪个数据变化都需要执行回调函数
    • f24206136363e943e8430b25ed809b9e.png
    • 0f57ac6bc2ad52023581a8baff1ccb0b.png

immediate 参数

  • 在监听器创建时立刻触发回调
    • 5c2e36b5a5480a633153e139e82c45b9.png
    • f3889bd48a3fadf01be4399566178b3d.png
    • f4a8eba728866c25466b05afc6d2116b.png

deep 参数

  • 说明:watch 默认为浅层监视,即简单类型的响应式数据可以直接监视,但无法监视到复杂类型内部数据的变化
  • 3c4f545e960efe0f4ac5a4177b79bc8b.png

精确监听对象的某个属性

  • 需求:在不开启 deep 的条件下,监听 age 的变化
  • 8387ac8e87ec5c56154e5345a6599085.png
  • 83f0e7c73e05aca3aaf29d533b224049.png

生命周期函数

  • 1b72263f79b797d39b0a4d25d85d238d.png
  • b3ce45c57326174f293433590b79891a.png

父子组件通信

父传子

  • defineProps 原理:就是编译阶段的一个标识,实际编译器解析时,遇到后会进行编译转换 bb3a2547b0655f451cf17a44e23ca5ca.png
  • e856dfb56cd3c885b1eadcd43c72fac7.png

子传父

  • 基本思想
    1. 父组件中给子组件标签通过@绑定事件
    2. 子组件内部通过 emit方法触发事件
  • af194d845ada54022227fa0557adbb5d.png

模板引用 + defineExpose宏函数

模板引用

  • 概念:通过 ref标识 获取真实的 dom 对象或者组件实例对象
  • 步骤
    • 通过调用 ref函数 生成一个 ref对象
    • 通过 ref标识绑定 ref 对象到标签
    • 3304ca862abb6ce0685e8255a66f5651.png

defineExpose()

  • 背景:默认情况下在 <script setup> 语法糖下组件内部的属性和方法是不开放给父母组件访问的
  • 作用:可以通过 defineExpose 编译宏指定哪些属性和方法允许访问
    • ef34eea49d0e4162d1d875f1d671716a.png

inject + provide

  • 作用:顶层组件向任意的底层组件传递数据和方法,实现跨层组件通信
  • fec94ee68abe04d52bd9fa8b30411f48.png
  • 作用
    1. 顶层组件通过 provide 函数提供数据
    2. 底层组件通过 inject 函数获取数据
    • a7efd4048bdbfbc00cac91776ae83b60.png
    • 顶层组件可以向底层组件传递方法,底层组件调用方法修改顶层组件中的数据
    • 233bf5997dee92dd518b6665be1a313d.png

Vue3.3 新特性 - defineOptions

  • 背景:
  • 65705626fcf1932bc723b0a178c28316.png
  • ae100da20098e4c83416ab8cd2b4b9a3.png
  • e779fef424e86d22a7f6b4a36867d9e6.png
  • 解决
  • 8d047d639b63ff6f4dfed6e6a78b5947.png

Vue3 中的 v-model 和 defineModel

  • 263e24e7d2be113beb58ace34f6f5b14.png
  • 使用 defineModel 前
    • c99a2859b660b735896c7d6173fb79ec.png
  • 使用 的 defineModel 后
    • cdd84d3aeaf00b8984cf36e7a216ec1a.png

Pinia

Pinia 简介

  • 59a9e1703376f4d1fb9351682b797440.png

Vue3 中导入pinia

  • 步骤
    • 创建 vue 项目:npm create vue@latest
    • 使用 npm install 安装相关依赖
    • 安装pinia:npm install pinia
    • 在 mian.js 中导入并安装有关 pinia 的依赖
      • 4c87a986eab35d10254d448dcec324ba.png

pinia 的基本语法

  • 3b39360ae8a9d2cfb3d6b8a48cedb0c2.png

storeToRefs

  • 11057168a6dc0d60a2f65b3dcb0f86fe.png
  • fbea02bfe15178315bb7d853885c1ad4.png
  • 5ebc630dd14a5ddaa1da93cd023fe7a4.png

pinia 持久化插件