首页 > 解决方案 > React.memo() 是 useMemo() 的薄包装吗?

问题描述

这篇文章中,作者使用useMemo()来记忆组件的一部分,而不是使用PureComponentor React.memo()。作者声称:

将 useMemo 应用于返回的 JSX 元素树与在没有侵入式组件重构的情况下应用 memo HOC 具有相同的效果

React 文档中的一个示例似乎也支持这种方法:

方便的是,useMemo 还可以让您跳过对孩子进行昂贵的重新渲染:

function Parent({ a, b }) {
  // Only re-rendered if `a` changes:
  const child1 = useMemo(() => <Child1 a={a} />, [a]);
  // Only re-rendered if `b` changes:
  const child2 = useMemo(() => <Child2 b={b} />, [b]);
  return (
    <>
      {child1}
      {child2}
    </>
  )
}

这让我很好奇:只是React.memo()一个方便的包装useMemo()吗?它是否保证相同的行为?

例如,React 文档中的另一个页面说:

如果你封装的函数组件在其实现中React.memo有一个useState,useReduceruseContextHook ,它仍然会在状态或上下文发生变化时重新渲染。

包裹在子组件中是否也能保证这种行为useMemo()?其他功能/非功能属性呢?

标签: javascriptreactjsreact-hooks

解决方案


推荐阅读