一、单向统计数据存取基本原理的差别
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是找不到的)