新特性
重写数据双向绑定
vue2 采用 Object.defineProperty(),vue3 基于 Proxy
为什么这么做?
defineProperty()对数组支持不友好,需要重写数组的方法,并且直接修改数组的length是不被监听的- 代码更简化,可以监听动态新增的属性和删除的属性
VDOM性能提升
vue2 中每次 diff 都是全量对比,vue3 则区分了哪些是动态的添加标记,哪些是静态的则没有标记,只对带有标记的进行对比,提升了性能
Fragments
vue3中<template></template>中可以写多个同级节点了,但是vue2只能有一个节点
html
<!-- vue3 举例 -->
<template>
<div></div>
<div></div>
</template>- 支持
JSX语法 - 新增组件
Suspense和teleport
Tree-Shaking
vue3 可以在保持代码运行结果不变的前提下,去掉无用的代码,也就是按需引入
Composition API
Setup语法糖编程,例如ref,reactive,watch等