React中useMemo和useCallback的区别
一句话来解释,useMemo是缓存值的,useCallback是缓存函数的。
一、useMemo:
接收两个参数,第一个参数是个函数,第二个是依赖项。返回一个memoized值,只有当它的某个依赖项改变时才重新计算 memoized 值,初始化的时候也会调用一次,这种优化有助于避免在每次渲染时都进行高开销的计算。
import React, { useState, useMemo } from 'react';export default function hook() {const [count, setCount] = useState(1)const [total, setTotal] = useState(1)const memoizedValue = useMemo(() => {console.log("只有total变了我才会变")// 返回的值是total+1return total + 1}, [total]);return (<div><button onClick={() => setCount(count + 1)}>count + 1</button><button onClick={() => setTotal(total + 1)}>total + 1</button><div>count is {count}</div><div>total is {total}</div><div>memoizedValue is {memoizedValue}</div></div>)
}
二、useCallback
接收两个参数,第一个参数是个函数,第二个是依赖项。返回一个memoized函数,依赖项不变的情况下,memoizedCallback的引用不变。即:useCallback会被缓存,从而达到渲染性能优化的目的。
父组件:
export default function LearnUseCallBack() {const [num, setNum] = useState(1);const [count, setCount] = useState(1);const add = useCallback(() => {console.log("你好");setNum(num + 1);}, [count]);return (<div><div>缓存函数</div><button onClick={add}>num + 1</button><button onClick={() => setCount(count + 1)}>count + 1</button>num ==> {num}count ==> {count}<ChildComponent add={add}></ChildComponent></div>);
}
子组件:
import React, { useState, useCallback } from "react";// react.memo会做一层浅比较/*** 因为我们每次触发render 都会重新执行一遍当前函数* 所以说,我们的方法会重新赋值,react.memo时进行浅比较* 重新赋值的方法和之前的方法,引用不一样,所以react.memo* 会认为是一个新的对象,所以会重新渲染*/
const ChildComponent = React.memo((props) => {console.log("每次render都会触发吗?", props);return (<div><div>你好我是子组件</div></div>);
});
注:若add方法不被缓存,因为add是引用类型,则组件刷新时add函数每次渲染时都指向不同的引用类型,若将add传给子组件,即使子组件使用了memo包裹,子组件还是每次都会刷新的,影响性能!我们只希望与子组件相关的值变化了之后子组件才去重新渲染。
相关文章:
React中useMemo和useCallback的区别
一句话来解释,useMemo是缓存值的,useCallback是缓存函数的。 一、useMemo: 接收两个参数,第一个参数是个函数,第二个是依赖项。返回一个memoized值,只有当它的某个依赖项改变时才重新计算 memoized 值&…...
SpringBoot 快速实现IP地址解析
如果使用本地ip 解析的话,我们将会借助ip2region,该项目维护了一份较为详细的本地ip 地址对应表,如果为了离线环境的使用,需要导入该项目依赖,并指定版本,不同版本的方法可能存在差异。 <dependency>…...
亚马逊、速卖通,阿里国际等平台测评如何用自养号测评补单
在电商领域,补单是一种常见的推广方式。它能够优化商品销售、留下优质评论、打压竞品和赶走跟卖等,具有很多好处。然而,补单也存在安全性问题,有些卖家找人补单后店铺反而出了问题。因此,了解测评系统是非常重要的的。…...
ubuntu挂载ext4文件系统
文章目录 1.虚拟机分配10G磁盘用来挂载ext4文件系统2.磁盘分区3.创建文件系统4.挂载文件系统5.卸载文件系统6.使用ior测试ext4三种日志模式(1)ordered(2)journal(3)writeback 1.虚拟机分配10G磁盘用来挂载e…...
MySQL 读写分离
目录 一、什么是读写分离? 二、为什么要读写分离呢? 三、什么时候要读写分离? 四、主从复制与读写分离 五、MySQL 读写分离原理 六、企业 使用MySQL 读写分离场景 1)基于程序代码内部实现 2)基于中间代理层实现…...
【多线程例题】顺序打印abc线程
顺序打印-进阶版 方法一:三个线程竞争同一个锁,通过count判断是否打印 方法二:三个线程同时start,分别上锁,从a开始,打印后唤醒b 三个线程分别打印A,B,C 方法一:通过co…...
WebSocket工具类
最近的项目在整长连接WebSocket,之前也写过一个感觉没有这个全面。提供个工具类WebSocketHelper和Java-WebSocket-1.3.9.jar包以及一个HttpURLConnectionUtil 1、WebSocketHelper import android.util.Log;import org.java_websocket.client.WebSocketClient; imp…...
Linux 的 crontab
Linux 的 crontab 是一个用于在特定时间运行命令或脚本的工具。每个用户都可以创建自己的 crontab 文件来安排定时任务。 以下是使用 Linux crontab 的基本步骤: 打开终端或命令行界面。 输入以下命令来编辑当前用户的 crontab 文件: crontab -e如果是…...
十二.Redis模拟集群搭建
配置环境 查看环境信息 127.0.0.1:6379> info replication #查看当前redis的信息 # Replication role:master #角色 master主机 connected_slaves:0 #从机数量为0 master_failover_state:no-failover master_replid:115f37a0ec195680ef754d6915738b0c0a05f450 master_replid…...
IDEA导入微服务项目后自动将微服务展示在service面板中
有时候,不会自动将微服务展示在service面板中。 添加service面板: service面板: 更新所有maven,就可以自动将微服务展示在service面板中。...
MySQL体系结构及执行过程
一、MySQL体系结构 1、网络连接层 客户端连接器(Client Cnnectors):提供支持与MySQL服务器建立连接。 建立连接命令:mysql -h -u -p -h指定MySQL服务的IP 若本地连接则不需要 每一个连接均会保存用户权限,中途修改权…...
21. MySQL基础知识
文章目录 一、索引B Tree 原理1. 数据结构2. 操作3. 与红黑树的比较 MySQL 索引1. BTree 索引2. 哈希索引3. 全文索引4. 空间数据索引 索引优化1. 独立的列2. 多列索引3. 索引列的顺序4. 前缀索引5. 覆盖索引 索引的优点索引的使用条件 二、查询性能优化使用 Explain 进行分析优…...
【ArcGIS Pro微课1000例】0029:绘制全球海洋波纹荡漾效果图
本文讲解ArcGIS Pro3.0中,基于全球航洋面状矢量数据,绘制震撼全球海洋波纹荡漾效果图。 文章目录 一、效果预览二、效果制作三、参数详解一、效果预览 绘制好的海水波纹荡漾效果图如下: 下面我们来学习绘制过程。 二、效果制作 波纹荡漾效果需要在全局或者局部场景中制作…...
2023“钉耙编程”中国大学生算法设计超级联赛(3)8-bit Zoom
2023“钉耙编程”中国大学生算法设计超级联赛(3)8-bit Zoom 题解 有一张尺寸为 n n n\times n nn的图片,你要将图片放大成大小为 n Z 100 n Z 100 \dfrac{nZ}{100}\times \dfrac{nZ}{100} 100nZ100nZ的图片。 当下列任何一个条件不成…...
【PWN · ret2text | 伪rand()】[HDCTF 2023]pwnner
伪随机数以及ctypes库的初步接触 目录 前言 一、题目 二、解题思路 三、exp 总结 前言 一道简单的ret2text,加上一些伪随机的知识,对于本蒟蒻萌新来说,比较新,值得记录。 一、题目 栈溢出保护、PIE保护都没有开。反汇编后…...
第五章:通过对抗擦除的目标区域挖掘:一种简单的语义分割方法
0.摘要 我们研究了一种逐步挖掘具有鉴别性的物体区域的原则方法,使用分类网络来解决弱监督语义分割问题。分类网络只对感兴趣对象中的小而稀疏的鉴别性区域有响应,这与分割任务的要求相背离,分割任务需要定位密集、内部和完整的区域以进行像素…...
自定义view - 玩转字体变色
自定义View步骤: 1>:values__attrs.xml,定义自定义属性; 2>:在第三个构造方法中获取自定义属性; 3>:onMeasure【不是必须的】; 4>:onDraw:绘制代…...
工业边缘网关HiWoo Box的4G/5G CPE功能:为现场无线设备提供网络
引言 随着工业物联网的快速发展,现场设备的无线连接需求越来越迫切。然而,在一些室外或者不方便布网的场景下,为现场的无线设备提供网络仍然是一个挑战。为了满足这一需求,工业边缘网关HiWoo Box引入了4G/5G CPE(Cust…...
Set 和 Map 数据结构
数据结构Set ES6提供了新的数据结构Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。 Set本身是一个构造函数,用来生成Set数据结构。 // 数组去重 const set new Set([1, 2, 3, 4, 4]); [...set] // [1, 2, 3, 4]目前个人感觉Se…...
nginx根据url参数动态代理
nginx根据url参数动态代理 请求url格式,其中参数proxy后面的url就是需要访问的真实地址: http://localhost:9388/?proxyhttp://localhost:8038/Content/layui/font/iconfont.woff?v256 http://localhost:9388/?proxyhttp://localhost:8072/article/A…...
面试现场的“AI 对话感”:为什么 2026 年的面试官更喜欢“像跟 AI Pair Programming”一样的沟通节奏?
在 2026 年的北美科技大厂面试中,随着智能代码助手的全面普及,资深工程师们的日常工作习惯已经被彻底重塑。他们每天有大量的时间是在与极其高效、结构化的大语言模型进行 Pair Programming(结对编程)。这种潜移默化的习惯改变&am…...
Mathfs源码深度剖析:从多项式求解到几何代数的高级数学实现 [特殊字符]
Mathfs源码深度剖析:从多项式求解到几何代数的高级数学实现 🚀 【免费下载链接】Mathfs Expanded Math Functionality for Unity 项目地址: https://gitcode.com/gh_mirrors/ma/Mathfs Mathfs 是一个专为Unity游戏引擎设计的扩展数学功能库&#…...
大学物理(Ⅱ)核心公式解析与应用指南
1. 电磁学核心公式解析与应用 电磁学是大学物理(Ⅱ)的重要组成模块,其中包含多个关键公式。我们先从法拉第电磁感应定律说起,这个定律揭示了变化的磁场如何产生电场。在实际应用中,比如发电机的工作原理就基于此。公式…...
网站优化过程中如何防范黑帽SEO行为
网站优化过程中如何防范黑帽SEO行为 在数字营销和网站优化领域,搜索引擎优化(SEO)是一个至关重要的环节。为了迅速提升网站排名,有些人可能会尝试使用“黑帽SEO”手段。这种行为不仅违反了搜索引擎的规则,还可能导致网…...
别只用自带库了!LTspice仿真进阶:手把手教你搭建带运放的‘智能’稳压电路,性能对比一目了然
别只用自带库了!LTspice仿真进阶:手把手教你搭建带运放的‘智能’稳压电路,性能对比一目了然 在电子设计领域,稳压电路就像是为系统提供稳定"血液"的心脏。许多工程师习惯使用LTspice自带库中的齐纳二极管快速搭建基础稳…...
大模型训练实战:分布式训练、显存优化与知识蒸馏全解析!
全景路线图: 我们将按模块逐步展开,每个模块都是最终搭建完整平台的一块拼图:之前的章节参考我之前写的文章;G. 分布式训练篇:大模型训练的工程实践 – 学习在多卡多机环境下训练大模型的方法,包括数据并行…...
PyTorch 3.0静态图分布式训练落地实录:从模型编译失败到千卡吞吐提升3.8倍,我踩过的11个致命坑
第一章:PyTorch 3.0静态图分布式训练落地实录:从模型编译失败到千卡吞吐提升3.8倍在 PyTorch 3.0 正式引入 torch.compile() 与 torch.distributed._composable 协同优化的静态图分布式训练范式后,我们于千卡规模集群(A100-80GB …...
iOS / SwiftUI 输入法(键盘)布局处理总结(AI版)
文章目录📘 iOS / SwiftUI 输入法(键盘)处理总结一、问题背景二、输入框切换闪烁问题❌ 错误原因解决办法键盘动画(类似 Android Insets)uikitswiftUI📘 iOS / SwiftUI 输入法(键盘)…...
CsvHelper与Entity Framework集成:数据库导出的终极指南
CsvHelper与Entity Framework集成:数据库导出的终极指南 【免费下载链接】CsvHelper Library to help reading and writing CSV files 项目地址: https://gitcode.com/gh_mirrors/cs/CsvHelper 在当今数据驱动的世界中,CSV文件处理是每个开发者都…...
2025届必备的AI辅助论文平台解析与推荐
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 于学术写作范畴之内,AI工具已然明显地提升了研究效率,目前主流的论文…...
