1、组合式与选项式
- 选项式:和 vue2 一样。例如像
data、methods这些定义的属性全在函数内部this上,this指向组件实例。 - 组合式:新模式。在
<script setup>标签上加一个 setup,接着整个<script>就在 生命周期created之前蹦跶了。
2、更新时机
vue 会自动将所有需要更新的响应式状态缓存,确保只进行一次集体更新,虚拟 dom 的思路。 如果需要等更新后再操作,可考虑 nextTick() Api。
3、ref 和 reactive
同样是作为响应式对象的实现,ref 弥补了 reactive 的不足。
- 解决了响应式解绑的问题。
- 扩大了响应式绑定的数据类型。
4、computed 计算属性
最大的作用仅在于依赖于响应式的状态,来返回某值。并且提供缓存机制,仅在依赖项更新才触发重新计算。用处不大。
5、v-if 与 v-show 区别
<template>可以用 v-if ,不能用 v-show。
v-if 切换开销大(重排),v-show 初始渲染开销大(重绘)。
6、生命周期
vue 的生命周期分为:beforeCreate,created,beforeMount,mounted,beforeUpdate,updated,beforeUnmount,unmounted。
而对于组合式的 vue 来说,setup 里面编写的代码是直接运行在 created 生命周期的。
7、监听器 watch 与 watchEffect
都是用作监听状态变化后,执行回调函数。不同点在于:
watchEffect在初始化的时候便会执行。watch主要针对监听的是我们输入的具体数据源,也就是第一个参数。而watchEffect是会自动追踪回调函数里面的一切响应式依赖。
8、父与子组件通信
props与emit联合使用。可用在选项式 api 以及并没有设置 setup 的组合式组件。defineExpose子组件暴露其属性给父组件。父组件通过设置ref在页面挂载后获取子组件属性。defineProps是子组件获取父组件的值。defineEmits是父组件获取子组件抛出的方法。slot插槽的传递。provide和inject,这个更适合用于多层级传递。
9、动态组件
通过 <component :is"xxx"> 来切换 vue 组件。一般情况下切换掉的组件会被卸载,可用 <keep-alive> 缓存。
10、双向绑定响应式数据 与 单向数据流
vue 的最大优势便是在于做了数据的双向绑定,但这也仅仅只是参考,因为它还是有了 ref 这个能直接操作 dom 树的存在。
而单向数据流其实只是告诉你,我们不应该在子组件去修改父组件传来的值,然而实际上,也只是个君子协议罢了。
11、组合式函数
可以简单理解为 react hooks。复用纯逻辑,可传入响应式变量。
12、自定义指令 与 插件
可以通过,app.directive(名字,执行函数) 进行全局设定,方便直接进行 dom 操作。也可以直接设置在当前组件使用,不过一般都是前者居多。
插件则是通过返回一个带有 install 属性的一个函数,再通过 app.use(插件名) 贯通到全局上。
13、官方提供组件
<Transition>:过度动画,一般只涵盖单个组件或者单个元素。多个的可用<TransitionGroup>。<KeepAlive>:可以让组件保持存活,不卸载。一般与动态组件<component>搭配。<Teleport>:简单来说就是弹窗专业户。<Suspense>:辅助处理异步加载组件。