设计理念

逐渐向react-hooks靠拢,比如一个mountd声明周期里,在组件开始挂载时,可能我要去订阅全局状态管理器里的数据,发送异步请求,根据不同的参数在去决定UI视图的变化。~~mountd说:我太累了

而现在这种设计,可以很好的分离逻辑代码块,使得组件的代码更具有条理性,逻辑块可复用性增强,灵活度更高,而2.x的options定义的方式会阻碍这一点,让我们只能在某一个具体的函数内做不同但必须在这做的副作用操作。

更好的ts支持,v3更好的支持了ts。使得大型项目的维护更加简易

独立的函数让开发者决定要那些数据可以是响应式的。而不是全局的this上面挂载的很多东西,而vuex\router也在随之变化,更好的简化了 this的重量。

而响应式也是在getter触发中,去收集依赖项,模板被编译成渲染函数。

声明周期的变化,类似于Effect函数,可以很多个,对于当前组件来说,可以更好的决定逻辑块的编写处理时机和存放位置

而compostionAPI的出现,就像react的自定义hook一样,一个函数作为一个功能函数,只做某一件事。

与react-hooks相比,setup,只会执行一次,不会在每次更新时重复调用。不存组内联函数导致子组件更新的问题

Vue2020 - 图1

Diffing

vue2 是全量diff,但是vue3对于diff做了巨大的优化,比如编译时打上静态标记,在diff时就会跳过

vue3可以根据patchFalg精准的diff,对于变化位置的情况使用了最长递增子序列算法,对于效率也是其中一种优化