React Hook 和 Vue Hook 对比

  1. 首先底层设计的架构原理不同,vue3 仍然是mvvm的模型采用object.proxy实现数据的劫持和发布订阅者模式实现的数据双向绑定。 hooks 是函数+state 的形式,状态利用链表进行存储的,并不是一个监听的响应式变化。

  2. hooks 是基于函数的原理,每次state的改变都会触发render的从根节点开始从新至上而下的新的执行,但是vue 组合式api 不会setup 只初始化一次,某个响应式数据的变化不会导致整个组件的全部更新,进入了监听拦截后。就可以自己实现一个响应式的变化。所以vue 不必考虑几乎总是需要 useCallback 的问题,以防止传递函数prop给子组件的引用变化,导致无必要的重新渲染。

  3. hooks 是链表结构所以 其实React Hook的限制非常多,比如官方文档中就专门有一个章节介绍它的限制:

不要在条件或嵌套函数中调用 Hook,确保总是在你的 React 函数的最顶层调用他们。 遵守这条规则,你就能确保 Hook 在每一次渲染中都按照同样顺序被调用。这让 React 能够在多次 useState 和 useEffect 调用之间保持 hook 状态的正确。

  1. React Hook 有臭名昭著的闭包陷阱问题,如果用户忘记传递正确的依赖项数组,useEffect 和 useMemo 可能会捕获过时的变量,这不受此问题的影响。Vue 的自动依赖关系跟踪确保观察者和计算值始终正确无误。

在Vue中,之所以setup函数只执行一次,后续对于数据更新也可以驱动视图更新,归根结底在于它的「响应式机制」,比如我们定义了这样一个响应式属性: 这里虽然只执行了一次 setup 但是 count 在原理上是个 「响应式对象」,对于其上 value 属性的改动,是会触发「由 template 编译而成的 render 函数」 的重新执行的。

上次更新:
贡献者: 郑壮