useMemo和useCallback的使用

2023-10-27

useMemo

  • 功能:用来缓存数据;
  • 应用场景:当组件内部某个数据,需要通过计算而来,且这个计算依赖于state、props数据时使用;
  • 好处:避免依赖项未修改时,重复渲染导致的计算,浪费计算资源。

useCallback

  • 功能:缓存单个函数;
  • 应用场景:当父组件传递给子组件一个函数;
  • 好处:避免父组件重新渲染时函数重新创建,进而导致子组件因此重新渲染。
    useCallback应用时要注意不要作为单纯的函数缓存使用,否则会适得其反;应配合子组件调用,减少子组件重复渲染,或者当函数构建逻辑复杂时使用。

代码示例

import React, { useCallback, useMemo } from "react";
import ReactDOM from "react-dom"; 

const Parent = ({ a, b, c }) => {
  const func = useCallback(() => [a, b, c], [a, b, c]);
  const value = useMemo(() => a + b + c, [a, b, c]);
  console.log("Parent");
  return <Child func={func} value={value} />;
};

const Child = ({ func, value }) => {
  const expression = useMemo(() => func().join(" + "), [func]);
  const result = useMemo(() => value + "个", [value]);
  console.log("Child");
  return <div>{`${expression} = ${result}`}</div>;
};
 
ReactDOM.render(<Parent a={1} b={2} c={3} />, mountNode);

最后提一点,优化需得当,主力集中在重灾区;毕竟每个性能优化也会带来新的性能消耗,因此需要慎重考虑优化前后带来的价值。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

useMemo和useCallback的使用 的相关文章

  • Python时间格式转换

    概述 strptime 与strftime 若仅转换时间格式使用strftime 若需要做时间操作则使用strptime 1 strptime 中的p指parse 解析 一般解析都是说对字符串进行解析 所以strptime 方法是将字符串解

随机推荐

  • Yapi接口一键生成Java代码

    文章目录 一 简介 1 这是什么 2 有啥用 3 为什么要用 二 快速开始 1 下载 2 配置 3 运行 三 版本说明 v1 0 0 v1 0 1 四 Github项目地址 一 简介 1 这是什么 这是一个Java代码生成器 2 有啥用 能
  • IDEA如何生成 serialVersionUID

    序列化和反序列化 Java是面向对象的语言 与其他语言进行交互 比如与前端js进行http通信 需要把对象转化成一种通用的格式比如json 前端显然不认识Java对象 从对象到json字符串的转换 就是序列化的过程 反过来 从json字符串
  • import-from

    1 import from可以导入什么文件 通过import from 导入时 from后的来源可以是js vue json 这个是在webpack base conf js中extensions设置的 该属性值默认是js vue json
  • 深度学习入门资料整理

    深度学习基础总结 无一句废话 附完整思维导图 深度学习如何入门 知乎 深度学习入门基础讲义 shuzfan的博客 CSDN博客 深度学习入门 神经网络15分钟入门 足够通俗易懂了吧 知乎 深度学习基础知识点梳理 知乎
  • MQ-2烟雾传感器代码(STM32单片机驱动)

    MQ 2烟雾传感器代码 STM32单片机驱动 MQ 2烟雾传感器简介 接线 三级目录 MQ 2烟雾传感器简介 MQ 2烟雾传感器所使用的气敏材料是在清洁空气中电导率较低的二氧化锡 SnO2 当烟雾传感器所处环境中存在可燃气体时 烟雾传感器的
  • 什么是 BFC?

    3 BFC的规则 BFC就是一个块级元素 块级元素会在垂直方向一个接一个的排列BFC就是页面中的一个隔离的独立容器 容器里的标签不会影响到外部标签垂直方向的距离由margin决定 属于同一个BFC的两个相邻的标签外边距会发生重叠计算BFC的
  • 在线吉他调音

    先看效果 图片没有声 可以下载源码看看 比这更好 再看代码 查看更多
  • 输电线路故障诊断(Python代码,逻辑回归、决策树、随机森林、XGBoost和支持向量机五种不同方法诊断)

    效果视频 输电线路故障诊断 Python代码 逻辑回归 决策树 随机森林 XGBoost和支持向量机五种不同方法诊断 哔哩哔哩 bilibili 项目文件 code py装载的是英文版本 图上显示英文标签及坐标 Chinese py装载的是
  • chisel快速入门(三)

    前一篇见此 chisel快速入门 二 沧海一升的博客 CSDN博客简单介绍了chisel 使硬件开发者能快速上手chisel https blog csdn net qq 21842097 article details 121418806
  • Windows11 WSL子系统ubuntu22.04 修改hostname

    大家都知道以往我们修改 Linux系统的 hostname只要修改 etc hostname 这个文件中的名字即可 但是在WSL中修改该文件是无法生效的 要修改Hostname并使它生效 我们必须修改 etc wsl conf 文件 编辑配
  • Anaconda环境的一些常用命令

    首先 在开始中找到Anaconda Prompt 这个窗口和cmd窗口一样的 1 查看有哪些环境 输入命令 conda info e 2 如何查看Anaconda中安装了哪些第三方库 用 conda list 或者 pip list 命令来
  • SpringBoot应用如何以优雅的方式对接老旧SSO实现单点登录逻辑

    目录 背景介绍 设计思想 登录前的时序图 登录后的时序图 back内部认证逻辑的设计 LoginFilter内部流程 JwtFilter内部流程 filter流程说明 权限校验 总结 背景介绍 我们现在开发WEB应用最流行的框架就是Spri
  • 【Java学习】-Java JDK 1.8与17版本比较

    前言 Java Development Kit JDK 是Java编程语言的开发环境 它包含了Java编译器 javac Java虚拟机 JVM 以及其他必需的工具和库 本文将比较JDK 1 8和17两个版本 分析它们的发展历史和地位 并探
  • 十二届蓝桥杯青少年Python组省赛试题

    一 选择题 第一题 设s Hello Lan Qiao 执行print s 4 11 输出的结果为 选择题严禁使用程序验证 A lo Lan Qi B lo Lan Q C o Lan Qi D o Lan Q 第二题 循环语句for i
  • Java 示例代码,它演示了如何使用 Java Swing 创建一个简单的图形用户界面(GUI)应用程序:

    import javax swing JFrame import javax swing JLabel import javax swing JButton import java awt event ActionListener impo
  • for与while的优缺点

    在循环次数已知的情况下 for循环的形式更加简洁 而循环次数无法预知时 用while循环实现更合适 用特定条件控制循环是否执行 循环体中执行的语句可能导致循环条件发生变化
  • 调试最长的一帧(第19天)

    这个主要是理论了 抄一抄 最常用到场景管理方式时场景节点树结构 场景树顶点的叶节点osg Geode包含了各种需要渲染的几何体的顶点和渲染状态信息 而组节点osg Group及其派生出的各种特殊功能节点则作为场景树的各个枝节节点 它们也可以
  • 10款在线检查英语语法的网站

    转自 https www sohu com a 239534894 655071 1 NOUNPLUS https www nounplus net grammarcheck nounplus是一个免费的语法检查网站 界面简洁流畅 并且有三
  • CentOS7下使用iptables

    系统升级到CentOS 7后总感觉iptables怪怪的 比如不管怎么保存重启后都被初始化一下 即便我最后发大绝招启动时候加命令 首先iptables save gt etc iptables rules保存当前状态 然后再在 etc rc
  • useMemo和useCallback的使用

    useMemo 功能 用来缓存数据 应用场景 当组件内部某个数据 需要通过计算而来 且这个计算依赖于state props数据时使用 好处 避免依赖项未修改时 重复渲染导致的计算 浪费计算资源 useCallback 功能 缓存单个函数 应