React.memo 是 React 中用于 优化组件渲染性能 的工具,通过记忆组件的渲染结果,避免不必要的重复渲染。它特别适用于子组件接收 props 但未发生改变时,减少重新渲染的开销。


🧠 核心原理

React.memo 的工作方式与 React 纯函数特性一致:

  • 浅比较 props:如果 props 未变化,直接返回记忆的 UI
  • 避免重复渲染:仅在 props 或 state 改变时触发重新渲染
const MemoizedComponent = React.memo(function Component({ prop1, prop2 }) {
  // 组件逻辑
});

📚 使用场景

场景 是否适用 说明
子组件依赖父组件 props 常用场景
子组件内部状态未变化 有效避免重复计算
高频更新但 UI 无变化 优化性能的关键

🛠 实现技巧

  1. 自定义比较函数
    使用 areEqual 参数控制比较逻辑:

    const MemoizedComponent = React.memo(
      function Component({ prop1, prop2 }) {
        // ...
      },
      (prevProps, nextProps) => {
        return isEqual(prevProps.prop1, nextProps.prop1) && 
               isEqual(prevProps.prop2, nextProps.prop2);
      }
    );
    
  2. 记忆函数组件
    对函数组件使用 React.memo 可减少渲染次数:

    React_Memo
  3. 注意点

    • 不适用于类组件,需用 PureComponent 替代
    • 无法直接记忆 refforwardRef 的内容
    • useMemo 作用不同,前者优化渲染,后者缓存计算结果

📌 相关资源


🚀 优化效果示例

情况 原始渲染次数 使用 React.memo 后
props 未变化 100次 1次
props 发生变化 100次 100次
优化技巧