前端面试题--vue2和vue3的区别

面试被问到:有了解过vue3吗?能说说vue2和vue3的区别吗?

可以从如下角度回答(欢迎指正补充~)

1.vue2和vue3双向数据绑定的原理

vue2的双向数据绑定时通过 Object.defineProperty()对数据进行劫持,结合发布订阅者模式的方式实现的

vue3发生了改变,使用Proxy替换object.defineProperty。优势在于

  • 可直接监听数组类型的数据变化
  • 性能的提升
  • 监听的目标为对象本身,不需要像Object.defineProperty一样遍历每个属性,有一定的性能提升
  • 可直接实现对象属性的新增/删除
  • vue2 使用的是 Object.definedProperty 的 get set 进行监控属性
  • 他无法监控对象的属性的【增加删除】
  • vue Proxy 深度监控对象 对象的属性的增加删除都可以监控到

2.根节点的不同

vue3在组件中支持多个根节点,可以写 多个div根标签

3.Composition API(组合api)

vue2和vue3最大的区别就是,vue3使用了Composition API

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

(图片来自网络)

在vue2中定义数据变量是data(){},创建的方法要在methods:{}中

vue3中直接在setup(){}中,在这里面定义的变量和方法因为最终要在模板中使用,所以最后都得return。

 

4.生命周期的变化

vue3中没有beforeCreated和Created,取而代之的是setup()

beforeMounted  ->  onBeforeMounted

mounted  -> onmounted

beforeUpdate  -> onBeforeUpdate

updated  ->  onBeforeUpdated

beforeDestory  ->  onBeforeUnmount

destoryed  ->onUnmounted

activated  -> onActivated

deactivated  ->  onDeactivated 

而且vue3生命周期在调用前需要先进行引入

 

5.vue2和vue3的diff算法

vue2的diff算法就是进行虚拟节点对比,并返回一个patch对象,用来存储两个节点不同的地方,最后用patch记录的消息去局部更新DOM。

vue2diff算法会比较每一个vnode,而对于一些不参与更新的元素,进行比较是有点消耗性能的。

 vue3 diff算法在初始化的时候会给每个虚拟节点添加一个patchFlags,patchFlags就是优化的标识。

只会比较patchFlags发生变化的VN哦的,进行更新视图,对于没有变化的元素做静态标记,在渲染的时候直接复用。

 

 6.v-if和v-for的优先级

vue2

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

v-for优先于v-if生效

vue3

v-if优先级优于v-for生效

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

7. vue3打包的时候无用代码丢弃

你可能感兴趣的:(面试题,前端)