React—useMemo与useCallback

本文深入探讨React的useMemo和useCallback Hook,解释它们如何用于性能优化。useMemo主要用来避免不必要的计算,当依赖项未改变时,它确保返回的值是缓存的。而useCallback则确保在子组件间传递的回调函数句柄保持一致,减少不必要的渲染。这两个Hook都在渲染过程的不同阶段执行,使用时需注意副作用操作。

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

看到“memo”这个字眼,很多人应该会想到memo方法。这是一个高阶函数,它会返回一个函数组件,作用相当于PureComponent

useMemo的作用也有点像,只不过它不是作用在函数组件上,而是在一段逻辑上,例如:

const [count, setCount] = useState(0);

const doubleCount = useMemo(() => {
    return 2 * count;
}, [count]);

useMemo的用法与useEffect非常相似,如果第二个参数为空则函数组件每次被渲染,useMemo内的逻辑都会被执行。如果第二个参数为一个空数组,那么仅会在组件第一次被渲染时执行。其他的情况都是在数组内元素完全相同时才不执行。

那么上面代码中的doubleCount是依赖count计算出来的,那么很显然当count没有发生变化,doubleCount计算出的结果也不会变化,因此也就没有必要重复计算,这就是useMemo最主要的作用,就是性能优化的手段

在上面的代码中,useMemo内的计算依赖于count,因此需要把count添加到第二个参数中。理论上所有useMemo内依赖的变量都一个添加到第二个参数中

需要注意的是,useMemo尽管看起来跟useEffect用法很像,但是useEffect是执行在渲染完成后,而useMemo则是在渲染期间执行的,所以useMemo中不要执行一些有副作用的操作。


给子组件传递回调函数时,会出现因为每次传递给子组件的回调函数的句柄不同(逻辑相同)而出现的不必要的渲染。因此我们希望能够传递给子组件句柄相同的回调函数。那么就可以用到useMemo了:

const callback useMemo(()=>{
    return () => {
        console.log('this is a callback');
    }
}, [])

useCallback就可以理解为一个语法糖,它省略了return

const callback useCallback(()=>{
    console.log('this is a callback');
}, [])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值