React性能之--如何避免组件重复渲染?

news2024/9/29 13:28:20

         在react中,我们会发现存在组件重复渲染,虽然说如果项目不大的话,这点影响不大,但是我们还是尽量避免组件渲染比较好,养成好习惯,尽可能让不管是大小项目,都让性能尽可能优化 。那我们如何避免组件重复渲染呢?

   一、在 React 中,可以通过以下几种方法来避免组件重复渲染:

      1、PureComponent 或 React.memo:这些是 React 提供的优化组件渲染的高阶组件。                  (1)PureComponent:会自动实现了shouldComponentUpdate方法,进行浅比较来判断是否需要重新渲染组件,PureComponent 在 shouldComponentUpdate 方法中对组件的 propsstate 进行浅比较。在React 16.8之前,建议使用PureComponent来优化组件性能。

          (2)React.memo:在React 16.8之后,引入了React.memo。React.memo是一个高阶组件,用于包装函数组件。它与PureComponent类似,也会进行浅比较来判断是否需要重新渲染组件,它对函数组件进行浅比较。如果 props 或 state 没有变化,组件将不会重新渲染。

      注意:React 16.8开始,推荐使用React.memo优化函数组件性能,而不再需要使用PureComponent

     2、 shouldComponentUpdate:在类组件中,可以手动实现 shouldComponentUpdate 方法来判断组件是否需要重新渲染。在该方法中,可以比较前后的 props 和 state,如果它们没有变化,可以返回 false 阻止组件重新渲染。

     3、 React 的 Context API:Context 可以避免跨层级组件不必要渲染。通过在上层组件中使用 Context.Provider,可以将需要共享的数据传递给子组件。子组件可以通过 Context.Consumer useContext Hook获取这些数据,而不需要通过 props 传递。

      总的来说,避免组件重复渲染关键减少不必要渲染触发。可以通过使用PureComponent 或 React.memo 来自动检测变化,并且在需要的地方手动实现 shouldComponentUpdate 方法或使
用 Context 来控制渲染。

二、使用

    1、PureComponent 或 React.memo

 2、 shouldComponentUpdate:

例子:在这个例子中,如果nameage没有改变,那么组件的render方法将不会被调用。这对于避免不必要的渲染可以提高性能

 3、 React 的 Context API

假设我们有一个简单的计数器组件,它包含一个按钮,点击按钮会增加计数器的值。现在我们希望将计数器的值传递给组件树中的其他组件,而不需要通过props将值逐级传递。

使用React的Context API可以实现这个目的。

(1)我们创建一个Context对象

(2)计数器组件:然后,在计数器组件中,我们将CounterContext.Provider包装在按钮周围,并将计数器的值作为value传递给Provider

(3)使用CounterContext.Consumer:现在,我们可以在任何想要访问计数器值的组件中使用CounterContext.Consumer

这样,每当我们点击增加计数器按钮时,只有DisplayCount组件会重新渲染,而不是整个组件树。这是通过Context API提供的跨组件传递数据的机制,它可以避免重复渲染整个组件树。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1991868.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring-创建bean

preInstantiateSingletons v1.0 preInstantiateSingletons tips:最终调用getBean使用的是RootBeanDefinition进行构建的 public void preInstantiateSingletons() throws BeansException {if (logger.isTraceEnabled()) {logger.trace("Pre-instantiating sin…

圣诞节星星飘落的效果(微信小程序版)

圣诞节快到啦~🎄🎄🎄🎄咱们也试着做做小程序版本的星星✨飘落效果吧 在微信小程序内如何实现雪花飘落,星星飘落的效果呢~ 先来个效果图: 1576672109245.gif 一步一步来:…

【稳定ACM出版、EI检索|武汉场线上线下结合】2024年第五届医学人工智能国际学术会议(ISAIMS 2024,8月13-17)

第五届医学人工智能国际学术会议(ISAIMS2024)将于2024年8月13-17日于荷兰阿姆斯特丹自由大学召开,国内分会场将于2024年10月25-27日于中国武汉召开。 本届会议将继续围绕人工智能在医学领域的最新研究成果,为来自国内外高等院校、…

智能化的Facebook未来:AI如何重塑社交网络的面貌?

随着人工智能(AI)技术的飞速发展,社交网络的面貌正在经历深刻的变革。Facebook(现Meta Platforms)作为全球最大的社交媒体平台之一,正积极探索如何利用AI技术来提升用户体验、优化内容管理并推动平台创新。…

全红婵夺冠后答记者问,太风趣了

8月6日晚,在巴黎结束的跳水女子10米台比赛中,17岁的中国选手全红婵以425.60分的高分成功卫冕,帮助中国代表团获得第22枚金牌。赛后采访时有记者想煽情,故意问到全红婵的哥哥来现场为她加油,结果小女子竟然毫无表情地回…

【python】Pandas处理Excel表格用法分析与最佳实践

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

AI大模型03:Function Calling

接口Interface (1)人际交互接口 UI (User Interface) (2)应用程序编程接口 API (Application Programming Interface) 接口能通的关键:是两方都要遵守约定。 &#xff0…

EI检索,2天录用,3天见刊!截稿在即,这本水刊你还不投吗?

点击关注:关注GZH【欧亚科睿学术】,GET完整版2023JCR分区列表! 🎉 🎉 🎉 🎉 恭喜!这本毕业水刊仅2天录用!3天见刊! 重要时间节点如下 2024-08-03 Sub…

360安全大模型为什么是“非卖品”?

大模型虽然不是万能的,但是没有大模型又是万万不能的。以AI大模型为动力引擎,AI正在重塑各行各业,并快速“飞入寻常百姓家”。 AI安全 以“模”制“模” 2024年全国两会,“人工智能”首次被写入政府工作报告。报告中提出&#xff…

Vue3 搭建前端工程,并使用idea配置项目启动

1 下载node.js 先下载 node.js LTS 并安装:node.js 的 npm,用于管理前端项目包依赖,这里以 14.17.3 这个版本为例。如果已经安装过 node.js,可以在设置中找到应用,点进去搜索 node.js 即可卸载 node.js 14.17.3 安装…

人生感悟|该如何最大化提升个人价值?

哈喽,你好啊,我是雷工! 你肯定也听到过这个观点:人际关系的本质是价值交换,社会的本质就是价值互换。 我们立足社会,无论是上班还是创业,本质上都是在互换价值。 那么我们该如何最大化提升我…

Linux IPC-管道

前言 前面我们已经对进程概念、进程控制做了介绍!本期开始将来介绍进程的最后一章进程间通信,即如何让两个进程进行通信!本博客主要介绍管道! 本期内容介绍 • 初识进程间通信 • 管道 一、初识进程间通信 1、进程间通信的概念…

基于Java+SpringBoot+Vue的教师工作量管理系统

基于JavaSpringBootVue的教师工作量管理系统 前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取项目下载方式&#x1f345…

OpenAi not returning result and exited with code=0

题意:OpenAi 没有返回结果,程序以代码 0 退出 问题背景: Im trying to use OpenAI, but I cant get a result. Im accessing the API via Visual Studio Code. I have downloaded these extensions for Visual Studio Code: Code Runner and…

Bash考古以及 StackOverflow的2024年度技术统计报告

0.缘起 前段时间,有一次调试.sh时废了好大功夫,单独执行各行指令,可以,但是存储为.sh就不行了,最终发现,我漏加了文件头部的那个声明: #!/bin/bash https://wikimili.com/en/Stephen_R._Bourne…

代发考生战报:考试通过 H12-831科目

代发考生战报:考试通过 H12-831科目,同事2人分别2天考HCIP续认证,考试题基本都是题库里的,印象有1-2个题是新题,也许是自己没记准,题库更新很及时,题库看会了考试很简单,考试半个小时…

认识Modbus RTU与Modbus TCP

(选自成都纵横智控-Modbus RTU与Modbus TCP协议区别详解 ) Modbus RTU 和 Modbus TCP 是两种常用的工业通信协议,用于连接电子设备,但它们在多方面有所不同。以下是它们的详细比较: Modbus RTU 协议类型: …

【精通Redis】Redis持久化和复制

文章目录 前言一、Redis持久化1.1 RDB快照手动触发自动触发save和bgsave的区别 1.2 AOF持久化appendonly配置 二、Redis复制2.1 开启Redis主从复制2.2 Redis复制的启动过程 前言 本文主要讨论Redis的持久化方式和复制特性。Redis的持久化方式有两种,一种叫RDB&…

越秀大悦城·天悦海湾 | 繁华底色 北方头等地标

每一座骄傲的城市,都以奔涌向前的气魄,屹立时代潮头。每一处让城市仰望的居所,亦怀揣与城市共美好的磐心,以焕新的生活方式致敬理想生活家。 越秀大悦城天悦海湾,踞青岛北站旁创新创业活力区,以优越生态基…