React性能优化之useCallback、useMemo以及memo

一、前言

        性能优化算是老生常谈的话题了,大家都在讲,大家也基本能说出几条优化方案,尤其是hooks出来后,经常可以脱口而出:使用hooks中的memo、useCallback、useMemo进行优化,但是具体怎么做呢?实际开发中大部分情况下依旧裸奔——啥都没用。

       我算是比较幸运的,很久之前就有同事说子组件使用memo可以减少渲染,原理大概就是如果子组件的pros没有发生变化,则不会重新渲染子组件。听起来不错,用!但是对于useCallback和useMemo,实在是有些谜。跟着一些博客写出的代码做输出,看着确实是优化了,但是具体用到项目中呢?也试过,但是从输出结果来看,没啥用。

       本次只是简单总结下,知其然,不知其所以然。

二、使用

     1、memo 

  • 使用对象:组件
  •  使用条件:一般是在父组件中为需要用的子组件套上;
  • 优点:减少子组件渲染次数,即当父组件有多个子组件时,使用memo,可以让没有props变化的子组件不渲染;
  •  使用:

                               用memo包裹后的组件,同正常组件同样使用即可;

 2、useCallback

  • 使用对象:函数
  • 使用条件:父组件传给子组件的函数
  • 优点:useCallback包裹的函数,相当于对函数做了缓存,当父组件重新渲染时,函数不会重新定义==》子组件不会重新渲染
  • 使用: 

             如图:PageA改变,不会引起PageB的重新渲染

3、useMemo

  • 使用对象:变量
  • 使用条件:父组件传给子组件的变量         
  •  优点:useMemo包裹的变量,相当于对变量做了缓存,当父组件重新渲染时,变量不会改变==》子组件不会重新渲染
  • 使用: 

       PageA改变,不会引起PageB的重新渲染

一句话总结:

      memo用于包裹子组件;useCallback和useMemo用于父组件向子组件传值时,即如果是组件内部自己用的函数和变量,不需要使用useCallback和useMemo。

 

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
引用\[1\]:在React中,memo是一个高阶组件,用于优化函数组件的性能。它类似于React.PureComponent,通过对内部对象进行浅比较来判断是否重新渲染组件。\[2\]useEffect是React提供的一个Hook函数,用于在函数组件中执行副作用操作。它可以在组件渲染完成后执行一些异步操作,比如发送网络请求、订阅事件等。\[3\]useMemoReact提供的另一个Hook函数,用于在函数组件中进行性能优化。它可以缓存计算结果,避免重复计算,类似于Vue中的computed属性。\[1\]useRef是React提供的一个Hook函数,用于在函数组件中创建一个可变的引用。它可以用来保存组件的状态,或者获取DOM元素的引用。\[1\]useState是React提供的一个Hook函数,用于在函数组件中创建一个可变的状态。它返回一个数组,第一个元素是当前的状态值,第二个元素是更新状态的函数。 所以,react memo用于优化函数组件的性能,useEffect用于执行副作用操作,useMemo用于缓存计算结果,useRef用于创建可变的引用,useState用于创建可变的状态。 #### 引用[.reference_title] - *1* *2* [useMemo,memo,useRef等相关hooks详解](https://blog.csdn.net/weixin_44441196/article/details/117328033)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [一文轻松掌握react-hook(useState、useReducer、useEffect、useCallbackuseMemouseRef、useContext...)](https://blog.csdn.net/u010074572/article/details/105176653)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值