<vue面试题>vue2与vue3的区别

115 阅读2分钟

一,用组合式api替换选项式api,方便逻辑更加的聚合

二,一些细节改变

  • 具体细节:
  1. 因为改成组合式api所以没有this

  2. 生命周期没有creat,setup等同于create,卸载改成unmount

  3. vue3中v-if高于v-for的优先级

  4. 根实例的创建从new app变成了createApp方法

  5. 一些全局注册,比如mixin,注册全局组件,use改成了用app实例调用,而不是vue类调用

  6. 新增了传送门teleport组件, 用于解决这样的场景,一个模板的一部分在逻辑上属于这个组件,但从师徒的角度看,他在dom中应该被渲染在整个vue应用外部的其他部分,比如说modal, <teleport>可以直接传送到外部body

<button @click="open = true">Open Modal</button>

<Teleport to="body">
  <div v-if="open" class="modal">
    <p>Hello from the modal!</p>
    <button @click="open = false">Close</button>
  </div>
</Teleport>
  1. template模板可以不包在一个根div里,可以写多根组件

三,响应式原理改成了用proxy,解决了数组无法通过下标修改,无法监听到对象属性的新增和删除的问题。也提升了响应式的效率

  • 深入回答:vue3并不是完全抛弃了defineProperty,通过reactive定义的响应式数据使用proxy包装出来,而ref还是用的defineProperty去给一个空对象,定义了一个value属性来做的响应式

四,支持按需引入,可以更好tree-shaking

五,性能优化,增加了静态节点标记。会标记静态节点,不对静态节点进行比对。从而增加效率

  • 深入回答:文本内容为变量会标记为1,属性为动态会标记为2,如果静态则不标记跳过比对

进阶回答点:

  1. vue3不推荐使用mixin进行复用逻辑提取,而是推荐写成hook

  2. v-model应用于组件时,监听的事件和传递的值改变

  3. ts更好地配合