React 之 解决页面多次重复渲染造成页面卡顿问题

2023-10-26

一、场景案例

描述: 画面上存在多个卡片(卡片是动态渲染的),每个卡片有自己的相关操作,比如,点击卡片的菜单项,出现弹框,弹框中需要填入相关的信息,在输入信息的过程中会出现一个字一个字出来的卡顿效果,或者是点击卡片菜单项,弹框出现的时候比较卡顿等

二、解决方案–React.memo

1. 作用

React.memo为高阶组件,主要作为性能优化的方式存在

2. 用法
  • 该方法接收两个参数,第二个参数可选,如: React.memo(MyComponent, areEqual)
  • 当areEqual的返回值为true时,不会触发重新渲染,返回false的时候,会触发重新渲染
  • 默认情况下,被React.memo包裹的组件,只会进行浅比较,如果我们需要自定义比较方式,此时就需要使用areEqual方法进行比较判定
  • 如果我们的组件中,存在useState、useReducer或者useContext的hook,当state或context发生变化时,即使它被React.memo包裹,它仍会重新渲染
3. 案例
function MyComponent(props) {
  /* 使用 props 渲染 */
}
function areEqual(prevProps, nextProps) {
  /*
  如果把 nextProps 传入 render 方法的返回结果与
  将 prevProps 传入 render 方法的返回结果一致则返回 true,
  否则返回 false
  */
}
export default React.memo(MyComponent, areEqual);
4. 注意

不要把 React 的 memo API 和 useMemo Hook 混淆了。React memo 用于把 React 组件包裹起来以防止重新渲染,而 useMemo 用于把数值记忆化。

三、总结

React.memo() 是一个高阶组件,接收一个组件并返回一个新组件。它会记忆组件上次的 Props,同下次需要更新的 Props 做 “浅对比”,如果相同就不做更新,只有在不同时才会重新渲染。如果你的组件存在一些耗时的计算,每次重新渲染对页面性能显然是糟糕的,这时 React.memo() 对你来说也许是一个好的选择。并不是所有的组件都要引入 React.memo(),自身浅对比这个过程也会有一些消耗,如果没有特殊需求,也不一定非要使用。
React.memo仅检查props变更

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

React 之 解决页面多次重复渲染造成页面卡顿问题 的相关文章

随机推荐

  • 阶乘之和

    问题描述 输入n 计算S 1 2 3 n 的末6位 不含前导0 n lt 10 6 n 表示前n个正整数之积 样例输入 10 样例输出 37913 实现代码 include
  • 面试题笔试-带答案-1

    一 选择题 234 1 下面中哪两个可以在 A 的子类中使用 class A protected int method1 int a int b return 0 A public int method 1 int a int b retu
  • 常见springcloud的中间件

    服务注册与发现 Eureka Consul ZooKeeper 负载均衡 Ribbon LoadBalancer 配置中心 Spring Cloud Config Consul ZooKeeper 消息队列 RabbitMQ Kafka 服
  • visual studio 2015 比较代码差异的几种方法

    linux 命令行中的 diff 不太好看 加了 y 并排看也不方便 希望在两个并排窗口里看看本地文件差异 如果是想直接可视化比较两个本地文本文件的看这个 盘点6款实用的文件对比工具 你都用过吗 郝光明的博客 CSDN博客 1 如果是看本地
  • feign get方法使用对象参数

    feign get方法使用对象参数 feign中和controller中不一样的地方 controller中可以get方法使用对象参数无需任何注解 可默认绑定到对象 ApiOperation 分页列表 GetMapping paged fu
  • SpringBoot多环境开发-配置文件

    一 多环境开发详解 在Spring Boot中进行多环境开发时 你可以使用配置文件来定义每个环境的属性 Spring Boot提供了一种方便的方式来管理和加载不同环境的配置文件 以下是一些常见的配置文件命名约定 application pr
  • window.history.go(-1) 无效,不回退页面

    问题描述 如上提现页面 点击 确认提现 按钮后 ajax请求服务端 成功后 window history go 1 回退到上一页面 但是实际运行时 没有回退 还是在当前页面 为什么 html 代码
  • 连接Oracle提示 ORA-28009: 应当以 SYSDBA 身份或 SYSOPER 身份建立 SYS 连接

    用eclipse测试Oracle连接时候报错 ORA 28009 应当以 SYSDBA 身份或 SYSOPER 身份建立 SYS 连接 解决办法 打开SQL plus并且进行连接 win r敲入命令 sqlplus nolog 进入SQL
  • 系统运维日常巡检都做什么

    系统运维日常巡检都做什么 系统运维日常巡检是确保服务器和系统正常运行的关键活动 它涉及对硬件 软件和网络进行定期检查 以发现潜在问题并采取相应的措施 以下是系统运维日常巡检的一些常见任务 1 硬件检查 检查服务器硬件的健康状态 包括电源供应
  • Oracle not in查不到应有的结果(NULL、IN、EXISTS详解)

    http x spirit iteye com blog 615603 首先我要感谢aa和Liu Xing帮我发现了我日志中的错误 之前比较粗心 把3条SQL语句写成一样的了 对于给读者造成的麻烦 我深表抱歉 今天我把原文做了修订 为了对得
  • linux安装管理

    今日学习总结 Linux安装管理 RPM Package Manager RPM是一个强大的命令行驱动的软件包管理工具 用来安装 卸载 校验 查询和更新 Linux 系统上的 软件包 RPM软件的安装 删除 更新只有root权限才能使用 对
  • kafka 3.5 生产者请求中的acks,在服务端如何处理源码

    一 生产者客户端配置参数acks说明 1 acks 1 2 acks 0 3 acks 1 二 请求在写入Leader的数据管道之前 则会验证Leader的ISR副本数量和配置中的最小ISR数量 1 Leader的ISR小于配置文件中min
  • [FAQ14812]如何快速对系统重启问题进行归类

    DESCRIPTION 当手机发生系统重启 即导致kernel重启的异常时 会在手机中的 data aee exp目录下保存异常重启的db 工程师可以通过GAT的bug report功能 或者直接通过adb pull 把对应的db从手机中抓
  • C/C++程序的内存开辟

    C C 程序内存分配的几个区域 1 栈区 stack 在执行函数时 函数内局部变量的存储单元都可以在栈上创建 函数执行结 束时这些存储单元自动被释放 栈内存分配运算内置于处理器的指令集中 效率很高 但是 分配的内存容量有限 栈区主要存放运行
  • 放弃几百万年薪的后续

    厂长 和洋哥认识很久了 最近他从网易离职 放弃了几百万的年薪 全身心的投入AIGC 刚开始我得到这个消息很是诧异 在详谈之后才明白了洋哥背后的思考逻辑 刚好今天他也写了篇文章做了解释 我申请转载过来给大家分享一下 洋哥 网名findyi 前
  • c语言 m个数 取n个数,本题要求编写程序,根据公式Cnm=m!(n−m)!n!算出从n个不同元素中取出m个元素(m≤n)的组合数。...

    实验2 4 7 求组合数 15分 本题要求编写程序 根据公式C n m m n m n 算出从n个不同元素中取出m个元素 m n 的组合数 建议定义和调用函数fact n 计算n 其中n的类型是int 函数类型是double 输入格式 输入
  • 推荐两款在线免费的可视化网页编辑器:Layoutit!和RXStudio

    2023年8月22日 周二上午 今天看Boost库的html文档时 突然也想自己写一个这样的html文档 但又不想手敲代码 于是在网上找到了很多可视化的网页编辑器 最后我觉得这两款编辑器比较好用 目录 Layout 官网 使用体验 使用方法
  • phpcms V9 局域网访问问题

    按下列步骤操作修改域名 1 打开caches configs system php文件 然后批量替换里面的域名 如把http 127 0 0 1替换为您的新域名 如http 192 168 114 140 保存 2 登陆后台 找到 设置 站
  • anaconda安装tensorboard过慢

    不要从官网下载tensorboard conda activate your environment name 通过国内的豆瓣源下载 pip install i https pypi douban com simple tensorboar
  • React 之 解决页面多次重复渲染造成页面卡顿问题

    一 场景案例 描述 画面上存在多个卡片 卡片是动态渲染的 每个卡片有自己的相关操作 比如 点击卡片的菜单项 出现弹框 弹框中需要填入相关的信息 在输入信息的过程中会出现一个字一个字出来的卡顿效果 或者是点击卡片菜单项 弹框出现的时候比较卡顿