2025年vue2和vue3的底层原理(vue2跟vue3的区别)

vue2和vue3的底层原理(vue2跟vue3的区别)vue2 的双向数据绑定是利用 ES5 的一个 API Object defineProper 对数据进行劫持 结合 发布订阅模式的方式来实现的 vue3 发生了改变 使用 proxy 替换 Object defineProert 使用 Proxy 的优势 可直接监听数组类型的数据变化 性能的提升 监听的目标为对象本身 不需要像 Object

大家好,我是讯享网,很高兴认识大家。



vue2 的双向数据绑定是利用ES5 的一个 API Object.definePropert()对数据进行劫持 结合 发布订阅模式的方式来实现的 vue3发生了改变,使用proxy替换Object.defineProerty,使用Proxy的优势:

可直接监听数组类型的数据变化 性能的提升 监听的目标为对象本身,不需要像Object.defineProperty一样遍历每个属性,有一定的性能提升 可直接实现对象属性的新增/删除

vue3在组件中支持多个根节点.

vue2

 
  
讯享网

vue3

讯享网

vue2和vue3最大的区别就是,vue3使用了Composition API (组合api)

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

在vue2中

 

Vue2--------------vue3


讯享网

讯享网beforeCreate  -> setup() 开始创建组件之前,创建的是data和method created       -> setup() beforeMount   -> onBeforeMount 组件挂载到节点上之前执行的函数。 mounted       -> onMounted 组件挂载完成后执行的函数 beforeUpdate  -> onBeforeUpdate 组件更新之前执行的函数。 updated       -> onUpdated 组件更新完成之后执行的函数。 beforeDestroy -> onBeforeUnmount 组件挂载到节点上之前执行的函数。 destroyed     -> onUnmounted 组件卸载之前执行的函数。dszhuoyi activated     -> onActivated 组件卸载完成后执行的函数 deactivated   -> onDeactivated

注意:如果想要在vue中获取dom节点在created中用this.$nexttick

  • 若组件被keepalive包含,则多出下面两个钩子函数。
  1. onActivated(): 被包含在中的组件,会多出两个生命周期钩子函数。被激活时执行 。
  2. onDeactivated(): 比如从 A组件,切换到 B 组件,A 组件消失时执行。

vue2

vue2 diff算法就是进行虚拟节点对比,并返回一个patch对象,用来存储两个节点不同的地方,最后用patch记录的消息去局部更新Dom。 vue2 diff算法会比较每一个vnode,而对于一些不参与更新的元素,进行比较是有点消耗性能的。

vue3

vue3 diff算法在初始化的时候会给每个虚拟节点添加一个patchFlags,patchFlags就是优化的标识。 只会比较patchFlags发生变化的vnode,进行更新视图,对于没有变化的元素做静态标记,在渲染的时候直接复用。

 

 

vue2

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

 

vue中会给我们报警告: 意思就是:属性“index”在渲染期间被访问,但未在实例上定义(v-if先进行判断,但是这时候v-for还没有渲染,所以index是找不到的)


小讯
上一篇 2025-05-02 22:47
下一篇 2025-06-08 15:43

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/197623.html