React Hooks
从 React Hooks 的实现角度看,React Hooks 是根据 useState 调用顺序来确定下一次重新渲染时的 state 是来源于哪个 useState ,所以出现以下限制:
-
不能在循环、条件、嵌套函数中调用 Hooks。
-
必须确保总是在你的 React 函数顶层调用 Hooks。
-
useEffect、useMemo等函数必须手动确定依赖关系。
Composition API
Composition API 是基于 Vue 的响应式系统实现的。
Composition API 与 React Hooks 相比:
-
声明在 setup 函数内,一次组件实例化只调用一次 setup ,而 React Hooks 每次重新渲染都需要调用 Hooks,使得 React 的 GC 比 Vue 更有压力,性能相对于 Vue 会比较慢。
-
Composition API 的调用不需要考虑调用顺序,也可以在循环、条件、嵌套函数中使用。
-
响应式系统自动实现依赖收集原理,所以,组件部分的性能优化由 Vue 内部自己完成。
-
React Hooks 需要手动传入依赖,且必须保证依赖的顺序,让 useEffect、useMemo等函数正确的捕获依赖变量,否则会由于依赖不正确使得组件性能下降。
虽然 Composition API 看起来比 React Hooks 好用,但其设计思想也是借鉴 React Hooks 的。
GC(Garbage Collection) 是一种自动内存管理的机制,用于识别和回收程序中不再使用的内存空间,以防止内存泄漏,提高内存使用效率。