-
用闭包消灭了this ,这和react的hooks类似,但是vue的数据仍然是reactive的
-
配合jsx,无论是js区域还是html区域,代码提示水平大跃进,这同样因为闭包是js天然特性,而不需要this来做中转data、computed和methods等选项
-
声明式语法无法让代码在空间上根据业务来聚合,于是产生割裂,正如data必须写在data,methods必须写在methods
-
替代mixin,混入是粗糙的暴力,一锤子买卖,mixin带来彻底的不可信任。经常看到一个函数或属性,都不知道哪里定义的。而如果是在setup中引入,则完全可以明确当前究竟从哪引入,配合ts更能极大增强校验。(把数据定义抽成一个steup,然后再在原来的setup中引入,前者返回响应式数据,后者返回jsx形式的render,可以是这种形式)。所以显示地组合即可,没必要做类似继承的混入。在前端不需要继承后,混入更加地没有用武之地。毕竟不像后端数据模型,前端ui则像是万花筒般变化丰富,继承反而是不合理的。加之如今存储技术进步,在前端继承写法的代码并没有质上的性能优势。
-
其实上面四点,都是一样的,几乎指向同一个问题:vue不能忍受的,就是看到一个属性/方法,ctrl + 鼠标左键点不进去,点不进去!简直无法忍受,看代码效率比angular弱了10倍。因为各个选项的内容全部通过this来隐式中转
-
Vue.set,为的就是填响应式处理的坑,数组是非常常见的数据结构,但是直接修改元素却无法感知,对象新增属性也是。但是在vue3可以使用组合api中的reactive。彻底跟Vue.set说再见。如果监听一个数组,那么即使使用$set修改引用某个元素的某个属性,那么也是无法被感知的
-
有点像用hook的方式写class组件。为什么呢,setup函数返回的是render函数,将来被重复执行的是render函数,而setup函数体是只会被执行一次,其中的状态是通过闭包储存起来被render引用。所以说保留了class组件的风格,却拥有了hook的组合