当前位置: 首页 > news >正文

7.react useCallback与useMemo函数使用与常见问题

react useCallback与useMemo函数使用与常见问题

useCallback返回一个可记忆的函数,useMemo返回一个可记忆的值,useCallback只是useMemo的一种特殊形式。

那么这到底是什么意思呢?实际上我们在父子通信的时候,有可能传递的值是一样的,但是传递的内存地址可能是不一样的,那么在React眼里是会对组件进行重新执行的。

一般对象类型的值都是具备内存地址的,所以值相同,但内存地址可能不同,举例如下:

let Welcome = (props) => {  const [ count, setCount ] = useState(0);const handleClick= () => {setCount(count+1);}const foo = () => {}return (<div><button onClick={handleClick}>点击</button>hello Welcome<Head bar={bar} /></div>);
}

当点击按钮的时候,组件会进行重新渲染,因为每次重新触发组件的时候,后会重新生成一个新的内存地址的foo函数。

那么如何不让foo函数重新生成,使用之前的函数地址呢?因为这样做可以减少子组件的渲染,从而提升性能。可以通过useCallback来实现。

const foo = useCallback(() => {}, [])

等价

const foo = useMemo(()=> ()=>{}, [])   // 针对函数

而有时候这种需要不一定都是函数,比如数组的情况下,我们就需要用到useMemo这个钩子函数了,useMemo更加强大,其实useCallback是useMemo的一种特殊形式而已。

const foo = useMemo(()=> ()=>{}, [])   // 针对函数
const bar = useMemo(()=> [1,2,3], [])  // 针对数组

这里我们还要注意,第二个参数是一个数组,这个数组可以作为依赖项存在,也就是说当依赖项发生值的改变的时候,那么对应的对象就会重新创建。

const foo = useMemo(()=> ()=>{}, [count])   // 当count改变时,函数重新创建
http://www.lryc.cn/news/97110.html

相关文章:

  • Sentinel限流中间件
  • 使用ajax进行前后端交互的方法
  • 动手学深度学习——线性回归从零开始
  • Redis缓存击穿
  • 网络安全(黑客)自学的一些建议
  • 全志F1C200S嵌入式驱动开发(基于usb otg的spi-nor镜像烧入)
  • 如何恢复损坏/删除的 Word 文件
  • 【论文阅读】Feature Inference Attack on Shapley Values
  • TDesign 中后台系统搭建
  • Android 实现阅读用户协议的文字控件效果
  • 19.主题时钟
  • ChatGPT在智能电子设备中的应用如何?
  • MGRE之OSPF实验
  • 【Selenium+Pytest+allure报告生成自动化测试框架】附带项目源码和项目部署文档
  • 如何负载均衡中的日志统一管理
  • Java_26_Stream流
  • 周四见 | 物流人的一周资讯
  • uniapp 即时通讯开发流程详解
  • 【Terraform学习】Terraform-docker部署快速入门(快速入门)
  • C# 全局响应Ctrl+Alt+鼠标右键
  • 【Leetcode】54.螺旋矩阵
  • 怎样计算一个算法的复杂度?
  • 【问题记录】Ubuntu 22.04 环境下,打开 VS Code 老是访问密钥环该怎么解决?
  • format格式化输出语法详解
  • RocketMQ教程-(5)-功能特性-事务消息
  • HANA学习笔记
  • VMware虚拟机无法上网的解决办法
  • PLC-Recorder的高速采集有多快?0.5ms算快吗?看控制器能力了!
  • KMP算法总结
  • 消息中间件ActiveMQ介绍