useCallback和useMemo的区别?

news/2024/7/15 19:33:29 标签: react.js

文章目录

  • 前言
  • useCallback
  • useMemo
  • useCallback除了缓存回调函数还可以做什么操作?
  • 后言

前言

hello world欢迎来到前端的新世界


😜当前文章系列专栏:react.js
🐱‍👓博主在前端领域还有很多知识和技术需要掌握,正在不断努力填补技术短板。(如果出现错误,感谢大家指出)🌹
💖感谢大家支持!您的观看就是作者创作的动力

useCallback和useMemo都是React提供的用于性能优化的Hook,但它们的作用和应用场景有所不同。

useCallback

useCallback的作用是缓存函数,避免在每次渲染时都创建新的函数。当需要将一个回调函数作为props传递给子组件时,使用useCallback可以避免因为父组件的重新渲染而导致子组件的重复渲染。useCallback接收一个函数和一个依赖项数组作为参数。当依赖项数组发生变化时,会重新创建函数。如果依赖项数组为空,那么只会在组件挂载时创建一次函数。

应用场景

  • 在父组件中定义回调函数,作为props传递给子组件时,避免子组件重复渲染。
  • 在某个函数内部,定义了一个会被多次调用的回调函数,通过useCallback将其缓存,避免过度渲染。

useMemo

useMemo的作用是缓存计算结果,避免重复计算。当需要根据一些数据进行复杂的计算,或者从一个较大的数据集中过滤出一些数据时,可以使用useMemo来缓存计算结果,避免重复计算。useMemo接受两个参数:一个计算函数和一个依赖项数组。只有当依赖项数组发生变化时,才会重新计算。

应用场景

  • 对于一些昂贵的计算,如大量字符串拼接、复杂的数据处理、使用昂贵的库等,可以使用useMemo将计算结果缓存。
  • 对于某些数据的过滤、排序等操作,可以使用useMemo缓存计算结果,避免重复计算。

useCallback除了缓存回调函数还可以做什么操作?

除了缓存回调函数,useCallback本质上没有其他功能。它的主要作用是避免因为函数引用的变化而触发子组件的不必要重渲染,从而优化组件的性能。

但是在实际应用中,我们可以结合其他Hook和技巧,将useCallback与其他操作结合使用,以达到更好的效果,例如:

  • 结合useEffect:在某些情况下,我们需要在回调函数执行之后执行一些副作用操作,例如更新某个状态、发送网络请求等。这时,我们可以在useEffect中传入回调函数和依赖项,当依赖项发生变化时,执行回调函数并进行副作用操作。

  • 结合useRef:如果我们需要在多个地方使用同一个回调函数,但又不想通过props的方式来传递该函数,可以使用useRef来存储该函数,并在需要时调用。

  • 结合useMemo:在某些情况下,我们需要在回调函数中进行一些计算,但又不想在每次渲染时重新计算。这时我们可以使用useMemo缓存计算结果,并将其与回调函数结合使用。

总之,useCallback是一个非常有用的Hook,可以帮助我们优化组件的性能。它虽然本质上只是缓存回调函数,但是结合其他Hook和技巧,可以发挥出更多的作用。

后言

创作不易,要是本文章对广大读者有那么一点点帮助 不妨三连支持一下,您的鼓励就是博主创作的动力


http://www.niftyadmin.cn/n/5144766.html

相关文章

NEFU数字图像处理(3)图像分割

一、图像分割的基本概念 1.1专有名词 前景和背景 在图像分割中,我们通常需要将图像分为前景和背景两个部分。前景是指图像中我们感兴趣、要分割出来的部分,背景是指和前景不相关的部分。例如,对于一张人物照片,人物就是前景&…

pip install python是关于 NMake Makefiles报错

CMake Error at CMakeLists.txt:2 (PROJECT):GeneratorNMake Makefilesdoes not support platform specification, but platformx64was specified. I cant install opencv-python because I dont have vs? - Stack Overflow 这样解决就行。

TIME_WAIT相关知识

四次挥手 这是TCP四次握手的过程图。 TCP 连接终止时,主机 1 先发送 FIN 报文,主机 2 进入 CLOSE_WAIT 状态,并发送一个 ACK 应答,同时,主机 2 通过 read 调用获得 EOF,并将此结果通知应用程序进行主动关闭…

超好用的IDEA插件推荐,写完代码直接调试接口

Apipost推出IDEA插件非常省时高效,写完代码直接可以进行调试,而且支持生成接口文档,真是后端神器啊! 可以点击下方链接安装更新或在插件商店中搜索安装 下载链接:https://plugins.jetbrains.com/plugin/22676-apipos…

裸金属服务器和物理服务器的区别

裸金属服务器和物理服务器都是云计算领域比较受欢迎的服务器,二者之间既有联系也有区别。裸金属服务器和物理服务器的联系主要体现在它们都是基于硬件服务器的底层架构,例如硬件基础、资源隔离等相同,并且都具有高性能和较高的较高的系统定制…

知心早安问候语,愿你享受美好的时光,幸福快乐每一天

人生万里路,走好每一步,身体是本钱,平安是财富,开心就是护身符,健康才是摇钱树。新的一天,事事顺意! 晨起福门开,快乐安康在,愉悦心态好,生活充满爱&#xf…

高月薪高年终如何抉择?

论坛上看到一篇文章,这个同学在纠结是选择月薪低x高年终还是选择高月薪的公司。 看了各位小伙伴给的建议,似乎都建议楼主去第二家高月薪的公司。 当然了,选择公司不能只看薪资高低,也要综合职级、老板、团队、职业发展潜力做决策…

封装localstorage为对象 js

export const LocalStorageManager {recordKey: "Record",// 获取本地存储中的值get(key) {try {const value localStorage.getItem(key);if (value null || value undefined || value "") {return null;}return JSON.parse(localStorage.getItem(key…