一个管组件,一个管值/计算。
缓存整个函数组件,只有 props 变了才重新渲染。
import { memo } from "react";
const Child = memo(function Child({ data }) {
console.log("Child 渲染了");
return <div>{data}</div>;
});
缓存一个“计算结果”,避免每次渲染都重新计算。
import { useMemo } from 'react';
const expensiveValue = useMemo(() => {
// 昂贵计算
return bigList.filter(...).map(...);
}, [dep1, dep2]);
| 特性 | React.memo | useMemo |
|---|---|---|
| 包装对象 | 组件 | 一个值/一段计算 |
| 目的 | 防止组件重复渲染 | 防止重复计算 |
| 原理 | 浅比较 props | 比较依赖数组 |
| 返回 | 缓存后的组件 | 缓存后的值 |
| 写法 | memo(Component) |
useMemo(() => result, deps) |
const Child = memo(({ list }) => { ... });
const Parent = () => {
// 用 useMemo 缓存 list,否则每次都是新引用 → Child 必重渲染
const list = useMemo(() => data.filter(...), [data]);
return <Child list={list} />;
};
memo + useMemo 一起用才真正有效。