vue2和vue3的区别

2022-11-26 0 664

一、单向统计数据存取基本原理的差别

vue2 的单向统计数据存取是借助ES5 的两个APIObject.definePropert()对统计数据展开挟持 紧密结合 正式发布订户商业模式的形式来同时实现的

vue3出现了出现改变,采用proxy代替Object.defineProerty,采用Proxy的竞争优势

1、可间接窃听字符串类别的统计数据变动

2、操控性的提高

3、窃听的最终目标为第一类这类,不须要像Object.defineProperty那样结点每个特性,有很大的操控性提高

4、可间接同时实现第一类特性的追加/删掉

二、根结点的相同

vue3在模块中全力支持数个根结点

vue2

<template> <div> <h1></h1> <div> </template>

vue3

<template> <div> <h1></h1> <div> <div> <span></span> <div> </template>

三、vue3采用了Composition API (组合api)

在vue2中是采用的Options API,这种写法不方便我们的阅读和交流,逻辑过于分散。

vue2(统计数据和方法分开)

<script> export default { // 统计数据 data(){ return{}; }, mounted(){}, // 方法 methods:{}, computed:{} } </script>

vue3(统计数据和方法都在setup里面)

<script> export default { setup(){ // 统计数据和方法都写这里,更简洁 } } </script>

四、生命周期的变动

beforeCreate -> setup() 开始创建模块之前,创建的是data和method created -> setup() beforeMount -> onBeforeMount 模块挂载到结点上之前执行的函数。 mounted -> onMounted 模块挂载完成后执行的函数 beforeUpdate -> onBeforeUpdate 模块更新之前执行的函数。 updated -> onUpdated 模块更新完成之后执行的函数。 beforeDestroy -> onBeforeUnmount 模块挂载到结点上之前执行的函数。 destroyed -> onUnmounted 模块卸载之前执行的函数。 activated -> onActivated 模块卸载完成后执行的函数 deactivated -> onDeactivated 在模块切换中老模块消失的时候执行

五、diff算法

vue2

diff算法就是展开虚拟结点对比,并返回两个patch第一类,用来存储两个结点相同的地方,最后用patch记录的消息去局部更新Dom。 diff算法会比较每两个vnode,而对于一些不参与更新的元素,展开比较是有点消耗操控性的。

vue3

diff算法在初始化的时候会给每一虚拟结点添加两个patchFlags,patchFlags就是优化的标识。 只会比较patchFlags出现变动的vnode,展开更新视图,对于没有变动的元素做静态标记,在渲染的时候间接复用。

六、v-if 和 v-for的优先级

vue2

我们最好不要把v-if和v-for同时用在两个元素上,这样会带来操控性的浪费(每次都要先渲染才会展开条件判断)

v-for 优先于 v-if 生效 <div v-if=”index == 1″ v-for=”(item,index) in arr” :key=”index”>{{item}}</div>

vue3

v-if 优先于 v-for 生效 <div v-if=”index == 1″ v-for=”(item,index) in arr” :key=”index”>{{item}} </div>

vue中会给我们报警告:

意思就是:特性“index”在渲染期间被访问,但未在实例上定义(v-if先展开判断,但是这时候v-for还没有渲染,所以index是找不到的)

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务