Vue3 中组合式API 与 React Hooks 的区别是?
1. 调用顺序
Vue3:组合式API不限制调用顺序,可以有条件地进行调用
React-hooks:有调用顺序的限制,不可以写在条件分支中
查看源码分析:例如:useState定义的变量会放在一个数组中,在条件分支中需要根据条件定义变量放入数组,若出现某个变量某种情况定义,或者某种情况不定义,则由数组下标访问数组变量值时,出现异常
2. 性能优化
Vue3:
a) setup 更小的生产包体积
b) setup 无需担心闭包变量的问题
原因:<script setup>
中的代码位于同一作用域。不像选项式 API 需要依赖 this
上下文对象访问属性,被编译的模板可以直接访问 <script setup>
中定义的变量,无需从实例中代理。这对代码压缩更友好,因为本地变量的名字可以被压缩,但对象的属性名则不能。
c) 无需手动缓存回调函数来避免组件更新
d) 响应系统自动捕获依赖
React-hooks:
a) 担心闭包变量的问题:定义的变量会被钩子函数闭包捕获
b) 使用 useMemo 和 useCallback 进行避免不必要的dom更新,提升性能优化 (不好)
c) 需要手动声明依赖