React中useMemo和useCallback如何做到性能优化?

useMemo
useMemo用来缓存值,保存每次渲染时,不会发生变化的值,减少计算。在一些开销较大且值不会变的场景下特别有用。
useCallback
useCallback用来缓存函数。通常用于父子组件中,父组件传给子组件一个函数,父组件更新时,传递给子组件的函数也会被 重新创建。有时候传递给子组件的函数没必要重新创建,useCallback就可以缓存这个函数,不使这个函数重新被创建。

这两个hooks的作用就是进行数据缓存,避免页面重新渲染时不必要的参数重复更新。
它们的适用场景就是对于只需要单次进行复杂计算的内容进行数据存储,从而减少页面性能开销。
useMemo和useCallback两个hooks的出现,针对的痛点就是useEffect的执行时期是在页面渲染之后执行的,因此即使是不需要进行重复更新的参数,也会在页面重新渲染时再次更新,这是非常不友好的。当然,我们可以通过useEffect的第二个参数来阻止第一个参数的执行,但是它的执行时期仍然是页面渲染之后。
但useMemo和useCallback这两个hooks也有自己的缺点,那就是它们为了进行数据存储需要一直维护第二个参数,也就是依赖数组
useMemo返回的是一个变量的值,useCallback返回的是一个函数。对应到function组件最后要return的html代码部分,useMemo就是作为一个值来使用的,而useCallback则是被绑定到onClick上,作为要执行的函数。这就是它俩的本质区别。
hooks的useCallback
返回一个需要缓存的函数
传递需要更新的依赖项,一般回调函数内部使用的数据,都需要添加在依赖项中,避免父子之间,子级生成新的props函数,从而刷新子组件。
当父级组件传递给子级组件一个函数时,无状态组件每次都会重新生成新的props函数,导致子组件刷新,一般联合useMemo一起使用。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值