Vue3, setup 语法糖、Composition API 全方位解读
起初 Vue3.0 暴露变量必须
return
出来,template
中才能使用;Vue3.2 中 只需要在
script
标签上加上setup
属性,组件在编译的过程中代码运行的上下文是在setup()
函数中,无需return
,template
可直接使用。本文章以 Vue2 的角度学习 Vue3 的语法,让你快速理解 Vue3 的 Composition Api
本文章第十四节为状态库
Pinia
的安装、使用讲解
一、文件结构
Vue2 中,<template>
标签中只能有一个根元素,在 Vue3 中没有此限制
二、data
三、method
四、computed
五、watch
六、props 父传子
子组件
父组件
引入子组件,组件会自动注册
七、emit 子传父
子组件
父组件
八、v-model
支持绑定多个v-model
,v-model
是 v-model:modelValue
的简写
绑定其他字段,如:v-model:name
参考 vue 实战视频讲解:进入学习
子组件
父组件
九、nextTick
十、ref 子组件实例和 defineExpose
在标准组件写法里,子组件的数据都是默认隐式暴露给父组件的,但在 script-setup 模式下,所有数据只是默认 return 给 template 使用,不会暴露到组件外,所以父组件是无法直接通过挂载 ref 变量获取子组件的数据。
如果要调用子组件的数据,需要先在子组件显示的暴露出来,才能够正确的拿到,这个操作,就是由 defineExpose 来完成。
子组件
父组件
1. 获取一个子组件实例
2. 获取多个子组件实例:在 v-for 中获取子组件实例
这种情况仅适用于 v-for 循环数是固定的情况
,因为如果 v-for 循环数
在初始化之后发生改变,那么就会导致 childRefs 再一次重复添加,childRefs 中会出现重复的子组件实例
3. 获取多个子组件实例:动态 v-for 获取子组件实例
通过下标来向 childRefs 添加/修改,初始化之后,动态修改 v-for 循环数,会自动根据下标重新修改该下标对应的数据
十、插槽 slot
子组件
父组件
十二、路由 useRoute 和 useRouter
十三、路由导航守卫
十四、store
Vuex
*Vue3 中的 Vuex 不再提供辅助函数写法
Pinia
*全面拥抱 Pinia
吧!
2021 年 11 月 24 日,尤大在 Twitter 上宣布:Pinia
正式成为 Vue 官方的状态库,意味着 Pinia
就是 Vuex 5
,Pinia
的优点:
同时支持 Composition Api 和 Options api 的语法;
去掉 mutations ,只有 state 、getters 和 actions ;
不支持嵌套的模块,通过组合 store 来代替;
更完善的 Typescript 支持;
清晰、显式的代码拆分;
安装
main.js 引入
配置 store.js
使用 store
其他方法
替换整个 state
$state
可以让你通过将 store
的属性设置为新对象来替换 store
的整个 state
重置状态
调用 store
上的 $reset()
方法将状态重置为初始值
十五、生命周期
通过在生命周期钩子前面加上 “on” 来访问组件的生命周期钩子。
下表包含如何在 Option API 和 setup() 内部调用生命周期钩子
十六、原型绑定与组件内使用
main.js
组件内使用
十七、v-bind() CSS 变量注入
十八、provide 和 inject
父组件
子组件
十九、自定义指令
Vue3 相较于 Vue2 的自定义声明方法有些不同
比如实现一个默认密文身份证号,点击才展示的指令
二十、对 await 的支持
不必再配合 async 就可以直接使用 await 了,这种情况下,组件的 setup 会自动变成 async setup 。
二十一、定义组件的 name
用单独的<script>
块来定义
评论