useMemo和useCallback的使用

本文深入探讨React Hooks中的useMemo与useCallback用法,解析如何有效避免不必要的计算和渲染,提升应用性能。通过具体代码示例,展示在哪些场景下使用这些Hooks能显著提高效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

useMemo

  • 功能:用来缓存数据;
  • 应用场景:当组件内部某个数据,需要通过计算而来,且这个计算依赖于state、props数据时使用;
  • 好处:避免依赖项未修改时,重复渲染导致的计算,浪费计算资源。

useCallback

  • 功能:缓存单个函数;
  • 应用场景:当父组件传递给子组件一个函数;
  • 好处:避免父组件重新渲染时函数重新创建,进而导致子组件因此重新渲染。
    useCallback应用时要注意不要作为单纯的函数缓存使用,否则会适得其反;应配合子组件调用,减少子组件重复渲染,或者当函数构建逻辑复杂时使用。

代码示例

import React, { useCallback, useMemo } from "react";
import ReactDOM from "react-dom"; 

const Parent = ({ a, b, c }) => {
  const func = useCallback(() => [a, b, c], [a, b, c]);
  const value = useMemo(() => a + b + c, [a, b, c]);
  console.log("Parent");
  return <Child func={func} value={value} />;
};

const Child = ({ func, value }) => {
  const expression = useMemo(() => func().join(" + "), [func]);
  const result = useMemo(() => value + "个", [value]);
  console.log("Child");
  return <div>{`${expression} = ${result}`}</div>;
};
 
ReactDOM.render(<Parent a={1} b={2} c={3} />, mountNode);

最后提一点,优化需得当,主力集中在重灾区;毕竟每个性能优化也会带来新的性能消耗,因此需要慎重考虑优化前后带来的价值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值