一,用组合式api替换选项式api,方便逻辑更加的聚合
二,一些细节改变
- 具体细节:
-
因为改成组合式api所以没有this
-
生命周期没有creat,setup等同于create,卸载改成unmount
-
vue3中v-if高于v-for的优先级
-
根实例的创建从new app变成了createApp方法
-
一些全局注册,比如mixin,注册全局组件,use改成了用app实例调用,而不是vue类调用
-
新增了传送门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>
- template模板可以不包在一个根div里,可以写多根组件
三,响应式原理改成了用proxy,解决了数组无法通过下标修改,无法监听到对象属性的新增和删除的问题。也提升了响应式的效率
- 深入回答:vue3并不是完全抛弃了defineProperty,通过reactive定义的响应式数据使用proxy包装出来,而ref还是用的defineProperty去给一个空对象,定义了一个value属性来做的响应式
四,支持按需引入,可以更好tree-shaking
五,性能优化,增加了静态节点标记。会标记静态节点,不对静态节点进行比对。从而增加效率
- 深入回答:文本内容为变量会标记为1,属性为动态会标记为2,如果静态则不标记跳过比对
进阶回答点:
-
vue3不推荐使用mixin进行复用逻辑提取,而是推荐写成hook
-
v-model应用于组件时,监听的事件和传递的值改变
-
ts更好地配合