随便记一下……几点思考
解决的问题
- 组件组合能力不足,逻辑复用能力低,原有的
mixin
方案过于脏,很难在大型应用中大规模使用。 - 随之解决了反复纵跳问题,由于之前单文件组件的结构是HTML样式和JavaScript各占一块,导致组件比较大的时候经常要上下反复跳。Composition API 可以做到把一块逻辑独立到另外文件,简化了文件结构。
与 React Hooks 的区别
- React Hooks 每次重渲染即执行一次,Vue Setup 函数只在组件初始化执行一次。
- immutable / mutable 理念差别。React Hooks 创建一个 State 时同时给出一个函数用于更新值。Vue 则自动包装为 Proxy 自动监听变化,做到双向绑定。
思考
- React Hooks 继承了 React 精神,每次渲染都会执行一次,这必然会带来额外的开销。即使
useMemo
/useCallback
之类的函数都提供第二参数用于控制是否重新执行,但这一比较也是需要开销的,当依赖参数比较多的时候需要对比的也会多。尽管Object.is
对比参数是否相等开销很小,但这也是一笔开销。Vue 的依赖收集反而只是在需要更新的时候才更新,在性能上似乎更有优势。 - Vue 的自动包装,继承了 Vue 一贯的语法糖精神,将一些固定的事情交给框架来完成。不过,在 Template 中不需要写.current,Script 中要写这一差别着实有些丑陋,后续提出的 Refs 提案也是为了解决这一问题,而这一提案的效果是好的,却又引入了新的概念。这是一个见仁见智的操作,我个人觉得是可以接受的。