首页 > 其他分享 >useCallback 和 useMemo 使用场景

useCallback 和 useMemo 使用场景

时间:2024-11-15 13:08:11浏览次数:1  
标签:场景 const 渲染 useMemo useCallback 缓存 组件

 

一切为了性能,无论是 useCallback 还是 useMemo 还是 memo,都是为了让不该渲染的组件不去渲染

在学习 useCallback、useMemo 之前,我们需要知道一点,React 的渲染是自顶而下,如果父组件渲染了,那么子组件也会渲染,其子孙组件“世世代代”都要渲染

但如果父组件的渲染与子组件的 props 无关呢?设想一下父组件改变样式颜色,关我子组件的数据请求什么关系?

而这正是 useCallback 、useMemo、memo 的作用所在,将子组件用 memo 包住,如果 props 和上次渲染时相同,那么子组件就跳过了重新渲染,useCallback 缓存父组件传给子组件的函数,useMemo 缓存父组件传给子组件的(计算)值

如今 React19 提出 Compiler,不需要再写 useCallback 、useMemo、memo 扰乱心智了

 React Compiler

在讲 useMemo 是什么之前,我们先了解下什么是 Memo

Memo

官方定义:React.memo 是一个高阶组件(HOC),其主要目的是优化函数组件的性能。它通过记忆组件的渲染输出,使得当组件的 props 没有变化时,可以跳过该组件的重新渲染,从而提升性能

它会进行浅层对比,即对比两个对象或数组时只检查其第一层属性的相等性方法,在此比较中,仅比较对象的直接属性值,而不递归地深入到镶嵌的对象或数组中

const obj1 = { a: 1, b: { c: 2 } };
const obj2 = { a: 1, b: { c: 2 } };
const obj3 = obj1;

console.log(obj1 === obj2); // false,因为 obj1 和 obj2 指向不同的内存地址
console.log(obj1 === obj3); // true,因为 obj3 引用同一个 obj1

和浅拷贝一个道理,只考察第一层属性,不递归更深层的对象和数组

举个栗子

标签:场景,const,渲染,useMemo,useCallback,缓存,组件
From: https://www.cnblogs.com/wpshan/p/18547770

相关文章

  • 行驶证 OCR 识别 API 接口的应用场景有哪些?
    在当今数字化高速发展的时代,各种先进的技术不断涌现,为我们的生活和工作带来了极大的便利。其中,行驶证OCR识别API接口就是一项非常实用的技术创新,它在多个场景中有着广泛的应用。一、什么是行驶证OCR识别API接口行驶证OCR识别是一种利用光学字符识别技术,将行驶证上......
  • 手把手教你学simulink(15.2)--Simulink 动画控制场景:实现一个基于Simulink的3D角色动画
    目录项目概述项目背景项目目标系统架构系统建模模型设计输入模块控制模块动画模块显示模块模型搭建仿真和结果分析项目总结使用Simulink在动画控制场景下的另一个项目实例详细介绍。这个项目将重点放在使用Simulink设计和仿真一个3D角色动画控制系统,该系统能够......
  • 人工智能在金融行业的七大主要应用场景
    人工智能在金融领域的应用前景广泛,主要有以下七个方面的应用场景:一、智能客服与投资顾问:1、智能客服:基于自然语言处理和语音识别技术,智能客服可以与客户进行实时的沟通和交流,解答客户的问题,提供账户查询、业务办理等服务。智能客服能够理解客户的意图和需求,快速准确地给出......
  • Rust 如何处理高并发场景?(Rust高并发、Rust并发问题)(Rust Arc、Rust Mutex、Rust RwLock
    Rust如何处理高并发场景Rust的设计原则注重内存安全与并发的平衡,在提供高性能的同时,确保程序的安全性。在并发编程中,Rust提供了多种工具和库,特别是通过所有权、线程安全的类型、异步编程模型和并发原语等方式,解决了高并发场景中的一些难题。1.所有权系统与并发的......
  • 服务器集群的适用场景有哪些?
    服务器作为互联网中重要的网络设备,能够帮助企业确保网站的稳定性,而服务器集群则是由两台或者是多台服务器组成的,并且通过高速网络连接,协同工作来提供强大的计算资源和服务能力,可以用于多种应用场景当中。服务器集群中的高可用性,会让系统尽量减少停机时间的能力,当某台服务器发......
  • 国标GB28181摄像机接入LiteGBS国标GB28181设备端接入SDK直播平台的应用场景介绍
    LiteGBS国标GB28181网页直播平台视频能力丰富,部署灵活,既能作为业务平台使用,也能作为安防监控视频能力层被业务管理平台调用。国标GB28181视频LiteGBS国标GB28181软件平台可提供流媒体接入、处理、转发等服务,支持内网、公网的安防视频监控设备通过国标GB28181协议进行视频监控直播......
  • .net动态类ExpandoObject及使用场景
    它位于System.Dynamic命名空间中。与普通的C#类型不同,ExpandoObject允许在运行时动态地添加、删除或修改其成员(属性或方法)。这使得它在一些需要高度灵活性和动态性的数据结构场景中非常有用。ExpandoObject的基本特性动态成员访问:可以在运行时添加或移除属性和方法。弱类型......
  • 汽车场景OCR解决方案:电子行驶证与驾驶证识别,引领智慧交通新纪元
    在数字化浪潮的推动下,交通管理行业迎来了革命性的变化。OCR技术的电子行驶证和电子驾驶证的引入,极大地提高了车辆和驾驶执照的管理效率,并为车主的出行带来了极大的便利。随着电子证件的普及,交通管理正逐步从传统的实体证件向数字化转型,这不仅为智能出行提供了便利,也催生了新的......
  • 瓷砖的规格种类非常多,适用于不同场景和用途。常见的规格通常按尺寸、材质、功能和安装
    瓷砖的规格种类非常多,适用于不同场景和用途。常见的规格通常按尺寸、材质、功能和安装方式等进行分类。下面是一些常见瓷砖规格及其施工建议的对比表格,帮助选择适合的规格和施工人数。瓷砖规格与施工建议规格/尺寸(mm)适用场景常见材质适用类型施工人数建议优点缺点......
  • 国标GB28181软件LiteGBS国标GB28181-2022平台是多场景视频云服务平台
    LiteGBS国标GB28181软件是一款基于国标GB/T28181协议的视频云服务平台,支持多路设备同时接入,并可分发RTSP、RTMP、FLV、HLS、WebRTC等多种格式的视频流。该平台实现了Web浏览器、手机浏览器、微信、PC等各类终端的无插件播放,提供灵活高效的视频监控和管理解决方案。LiteGBS国标......