fat-cat

React.memo() 和 React.useMemo() 的区别


一个管组件,一个管值/计算


1. React.memo(高阶组件)

作用

缓存整个函数组件,只有 props 变了才重新渲染。

用法

import { memo } from "react";

const Child = memo(function Child({ data }) {
    console.log("Child 渲染了");
    return <div>{data}</div>;
});

原理

什么时候用


2. useMemo(Hook)

作用

缓存一个“计算结果”,避免每次渲染都重新计算。

用法

import { useMemo } from 'react';

const expensiveValue = useMemo(() => {
  // 昂贵计算
  return bigList.filter(...).map(...);
}, [dep1, dep2]);

原理

什么时候用


3. 最关键区别(面试必背)

特性 React.memo useMemo
包装对象 组件 一个值/一段计算
目的 防止组件重复渲染 防止重复计算
原理 浅比较 props 比较依赖数组
返回 缓存后的组件 缓存后的值
写法 memo(Component) useMemo(() => result, deps)

4. 经典配合用法(超级常用)

const Child = memo(({ list }) => { ... });

const Parent = () => {
  // 用 useMemo 缓存 list,否则每次都是新引用 → Child 必重渲染
  const list = useMemo(() => data.filter(...), [data]);

  return <Child list={list} />;
};

memo + useMemo 一起用才真正有效


5. 极简总结