原文地址:https://www.cnblogs.com/limou956259/p/17195546.html
1、双向数据绑定原理不同
2、是否支持碎片
3、API类型不同
4、定义数据变量和方法不同
5、生命周期钩子函数不同
vue2中的生命周期:
vue3:vue3中的生命周期:
setup 开始创建组件前
而且vue3.x 生命周期在调用前需要先进行引入。除了这些钩子函数外,vue3.x还增加了onRenderTracked 和onRenderTriggered函数。
6、父子传参不同
7、指令与插槽不同
8、main.js文件不同
关键词:
组合式api;proxy;支持碎片;组合式api;composition;生命周期;
二、vue3新增的响应式相关的函数
ref,reactive,readonly,computed,watch,watchEffect
关键词:
ref,reactive,readonly,computed,watch,watchEffect
三、ref的理解:
1)、功能:接受一个内部值,返回一个响应式的、可更改的 ref 对象,ref对象只有一个属性:value。
2)、使用ref对象:模板上不需要写 .value 属性(会自动解构),在js中,使用 .value 来完成数据的读写。
3)、ref接收基本类型和引用类型
ref可以接收基本类型。
ref也可以接收引用类型:如果将一个对象传给 ref函数,那么这个对象将通过 reactive() 转为具有深层次响应式的对象。
关键词:
value,响应式,
四、reactive的理解:
1)、功能: 接受一个对象,返回一个对象的响应式代理(proxy)。返回的对象以及其中嵌套的对象都会通过 ES Proxy 包裹,因此不等于源对象,建议只使用响应式代理,避免使用原始对象。
响应式转换是“深层”的:它会影响到所有嵌套的属性。一个响应式对象也将深层地解包任何 ref 属性,同时保持响应性。
2)、注意点:当访问到某个响应式数组或 Map 这样的原生集合类型中的 ref 元素时,不会执行 ref 的解包。
关键词:
对象、proxy、深层、数组、Map
五、readonly
1)、功能:接受一个对象 (不论是响应式还是普通的) 或是一个 ref,返回一个原值的只读代理。
2)、只读代理是深层的:对任何嵌套属性的访问都将是只读的。它的 ref 解包行为与 reactive() 相同,但解包得到的值是只读的。
关键词:
只读readonly
六、computed
功能:computed是计算属性。和选项式api中的计算属性实现的功能一样。
参数:
可以接受一个 getter 函数,返回一个只读的响应式 ref 对象。该 ref 通过 .value 暴露 getter 函数的返回值。
也可以接受一个带有 get 和 set 函数的对象来创建一个可写的 ref 对象。
七、watch
功能:侦听数据的变化,和选项式api中的watch实现的功能一样,组合式api中watch功能更加强大,灵活。默认是懒侦听的,即仅在侦听源发生变化时才执行回调函数。
参数:
第一个参数:侦听器的源,可以是以下几种:
一个函数(返回一个值的函数)
一个 ref
一个响应式对象
...或是由以上类型的值组成的数组
第二个参数:在(第一个参数的值)发生变化时要调用的回调函数。这个回调函数接受三个参数:新值、旧值,以及一个用于注册副作用清理的回调函数。该回调函数会在 副作用下一次重新执行前调用,可以用来清除无效的副作用,例如:等待中的异步请求。
当侦听多个来源时,回调函数接受两个数组,分别对应来源数组中的新值和旧值。
第三个参数:可选的, 是一个对象,支持以下这些选项:
immediate:在侦听器创建时立即触发回调。第一次调用时旧值是 undefined。
deep:如果源是对象,强制深度遍历,以便在深层级变更时触发回调。参考深层侦听器。
关键词:
侦听,监听,副作用,immediate,deep,深度遍历,懒侦听
八、watchEffect
功能: watchEffect也是监听数据,但是它会立即运行一个函数,而不是懒侦听。watchEffect的侦听(依赖)的数据:watchEffect里使用了哪个数据,哪个数据就是 watchEffect的依赖。
参数:
第一个参数:要运行的副作用函数。这个副作用函数的参数也是一个函数,注册副作用清理的回调函数。该回调函数会在副作用下一次重新执行前调用,可以用来清除无效的副作用,例如:等待中的异步请求。(和watch的第二个参数中回调函数的第三参数一样)。
第二个参数:可选的选项,可以用来调整副作用的刷新时机或调试副作用的依赖。因为,侦听默认是在vue组件更新前调用,如果你希望组件更新后调用,可以把第二个参数传入:{ flush: 'post' }
返回值:用来停止该副作用的函数。
关键词:
侦听,监听,副作用,依赖,不是懒侦听
九、watch和watchEffect的区别
与 watchEffect() 相比,watch() 使我们可以:
懒执行副作用:watch是懒侦听执行的;watchEffect是首次就会执行
触发侦听器的来源:watch是明确知道由哪个依赖引起的侦听,watchEffect不明确
可以访问所侦听状态的前一个值和当前值:watch可以,watchEffect不可以。
关键词:
懒侦听、当前值、前一个值,新值,旧值
十、setup函数的参数
props:接收组件的属性,
context:上下文对象,包括 slots,attrs,emit,expose
关键词:
slots,attrs,emits,expose
十一、setup语法糖写法如何获取setup函数的参数:
关键词:
defineProps;defineEmits;defineExpose;useSlots;useAttrs;
十二、vue3和vue2生命周期的变化,以及compositionApi中的生命周期钩子函数
1、Vue3.0中可以继续使用Vue2.x中的生命周期钩子,但有有两个被更名:
2、Vue3.0也提供了 Composition API 形式的生命周期钩子,Option API形式的钩子对应关系如下:
beforeCreate===>setup()
created=======>setup()
beforeMount ===>onBeforeMount
mounted=======>onMounted
beforeUpdate===>onBeforeUpdate
updated =======>onUpdated
beforeUnmount ==>onBeforeUnmount
unmounted =====>onUnmounted
关键词:
beforeUnmount;unmounted;onBeforeMount;onMounted;onBeforeUpdate;onUpdated;onBeforeUnmount;onUnmounted
十三、Vue3.X和vue2.X中的响应式原理分别是什么,区别是什么?
1、vue2.x的响应式
实现原理:
对象类型:通过Object.defineProperty()对属性的读取、修改进行拦截(数据劫持)。
数组类型:通过重写更新数组的一系列方法(如:push,pop等)来实现拦截。(对数组的变更方法进行了包裹)。
存在问题:
新增属性、删除属性, 界面不会更新。
直接通过下标修改数组, 界面不会自动更新。
2、Vue3.0的响应式
实现原理:
通过Proxy(代理): 拦截对象中任意属性的变化, 包括:属性值的读写、属性的添加、属性的删除等。
通过Reflect(反射): 对源对象的属性进行操作。
十四、vue3响应式数据的判断
关键词:
isRef;isReactive;isReadonly;isProxy;
十五、reactive与ref的区别:
定义数据角度:
关键词:
ref;reactive;Proxy;value;