Use Memo
useMemo: 用于缓存计算结果,避免重复计算,类似于 shouldComponentUpdate 生命周期。和vue的计算属性类似
计算量大的方法
const [text, setText] = useState("");
const [number, setNumber] = useState(0);
const expensiveFunction = (n) => {
console.log("方法开始!");
let total = 0;
for (let i = 1; i <= n; i++) {
total += i;
}
return total;
};
// 依赖number
const sum = useMemo(() => expensiveFunction(number), [number]);
console.log("组件渲染!");
// 结果 方法开始!-》 组件渲染!
return (
<div>
<input
onChange={(e) => setText(e.target.value)}
placeholder="enter a text"
/>
<input
type="number"
value={number}
onChange={(e) => setNumber(e.target.value)}
/>
<span>Total: {sum}</span>
</div>
);
useMemo VS useEffect
计算量大的组件与同级组件完全解耦
计算量大的组件通过组件参数传递传递
缓存组件 useMemo vs React.memo
React.memo vs useMemo
React.memo 用于对组件进行浅层比较,适用于优化组件的渲染性能,特别是当组件的渲染代价较高时,避免不必要的重新渲染。React.memo 适用于优化组渲染性能,特别是当组件的渲染代价较高时。React.memo 接受两个参数,第一个参数 Component 原始组件本身,第二个参数 compare 是一数,第二个参数不存在时,会浅层比较处理 props。
useMemo则是一个Hook,用于缓存计算结果,避免重复计算。useMemo接受两个参数,第一个参数是一个函数,用于进行计算;第二个参数是一个依赖数组,只有依赖数组中的值发生变化时,才会重新计算并返回计算结果。因此,useMemo适用于优化计算性能,特别是当计算代价较高时。React.memo 和
useMemo的作用虽然不同,但它们都是基于浅层比较的,因此只能比较props或依赖数组中的简单类型值。如果props或依赖数组中包含复杂类型值(如对象或数组),则需要自行实现比较逻辑,否则可能会导致不正确的渲染结果或缓存结果。
useMemo vs useCallback
useCallback用于缓存函数,记忆的是函数内存地址。而useMemo用于缓存第一个函数运算结果。
Last updated