React.memo 是 React 中用于 优化组件渲染性能 的工具,通过记忆组件的渲染结果,避免不必要的重复渲染。它特别适用于子组件接收 props 但未发生改变时,减少重新渲染的开销。
🧠 核心原理
React.memo 的工作方式与 React 纯函数特性一致:
- 浅比较 props:如果 props 未变化,直接返回记忆的 UI
- 避免重复渲染:仅在 props 或 state 改变时触发重新渲染
const MemoizedComponent = React.memo(function Component({ prop1, prop2 }) {
// 组件逻辑
});
📚 使用场景
场景 | 是否适用 | 说明 |
---|---|---|
子组件依赖父组件 props | ✅ | 常用场景 |
子组件内部状态未变化 | ✅ | 有效避免重复计算 |
高频更新但 UI 无变化 | ✅ | 优化性能的关键 |
🛠 实现技巧
自定义比较函数
使用areEqual
参数控制比较逻辑:const MemoizedComponent = React.memo( function Component({ prop1, prop2 }) { // ... }, (prevProps, nextProps) => { return isEqual(prevProps.prop1, nextProps.prop1) && isEqual(prevProps.prop2, nextProps.prop2); } );
记忆函数组件
对函数组件使用React.memo
可减少渲染次数:注意点
- 不适用于类组件,需用
PureComponent
替代 - 无法直接记忆
ref
或forwardRef
的内容 - 与
useMemo
作用不同,前者优化渲染,后者缓存计算结果
- 不适用于类组件,需用
📌 相关资源
🚀 优化效果示例
情况 | 原始渲染次数 | 使用 React.memo 后 |
---|---|---|
props 未变化 | 100次 | 1次 |
props 发生变化 | 100次 | 100次 |