当前位置: 首页 > news >正文

7.避免不必要的渲染

目录

1  组件更新机制

2  虚拟DOM配合Diff算法

3  减轻state

4  shouldComponentUpdate()

4.1  基本使用

4.2  使用参数

5  纯组件

5.1  基本使用

5.2  纯组件的比较方法 shallow compere


1  组件更新机制

当父组件重新渲染时,父组件的所有子组件也会重新渲染,但非父组件的所有子组件不会重新渲染

如果只有parent2更新了,那么只会更新 child2-1与child2-2及后代,别的都不更新

如果是根组件更新,那么就所有组件都会更新

2  虚拟DOM配合Diff算法

当组件中只有一个DOM元素需要更新时,React使用 虚拟DOM配合Diff算法 只对需要更新的部分更新

虚拟DOM本质上是一个JS对象,用来描述你希望再屏幕上看到的内容

  • 由于只是一个JS对象,所以有JS环境就可以描述DOM了,这个特性拜托了浏览器的束缚,更好的实现React跨平台的功能

渲染DOM的流程是这样的,首先根据一些数据生成虚拟DOM,然后根据虚拟DOM生成页面上的DOM

当数据发生改变的时候,生成一个新的虚拟DOM,Diff算法比较新的虚拟DOM与旧的虚拟DOM的区别,然后只重新渲染有改动的真实的DOM

  • 色表示改变的部分

3  减轻state

state应只存储何组件渲染有关的数据。

像定时器的id这种也需要在多个方法中用到的数据,应该放在this中

4  shouldComponentUpdate()

当父组件更新后,父组件的所有后代组件都会被更新,可以使用钩子函数 shouldComponentUpdate(nextProps,nextState) 来避免不必要的重新渲染

shouldComponentUpdate()可以接收nextProps与nextState两个参数,我们可以通过这两个参数对是否需要渲染进行判断,如果我们定义返回值为true表示需要重新渲染组件,false表示不需要重新渲染

shouldComponentUpdate()是在更新的时候触发,不会说这里给了false所以开始的时候渲染不出来

4.1  基本使用

我们做个计数器的例子,子组件负责显示文本

点击按钮后可以正常计数

现在我们在子组件中加入 shouldComponentUpdate(),并让其返回值为false

这个时候点按钮就没用了,因为返回值写死为false,所以就不会再更新了

4.2  使用参数

nextProps是最新的props,nextState是最新的state,我们简单用一下

点击按钮之后可以获取到最新的props与state

可以通过this.state与this.props获取更新前的状态

我们通过更新前与更新后的状态就可以判断此组件是否需要更新了

5  纯组件

5.1  基本使用

纯组件(React.PureComponent)与React.Component功能类似

之前我们创建组件的时候都是继承的React.Componnent

纯组件内部自动通过shallow compere(浅层对比)比较 更新前后的props与state ,如果有变化就渲染,如果没用变化就不渲染

我们简单做个例子,先看React.Component,目前点击按钮后count不再+1,而是保持原状

点击按钮后会执行render()

之后再看纯组件

由于count没有发生改变,所以只执行了一开始渲染页面的render(),后面点击按钮不再执行render()

5.2  纯组件的比较方法 shallow compere

值(整形,字符串这种)的话就是直接比,对于引用类型(数组,对象)只比较引用地址是否相同

在纯组件中使用浅拷贝会出问题

先回忆一下JS的浅拷贝

纯组件中的原理与上面一样,纯组件判定这一次对象与上一次对象相同,就不会再渲染了

 

如果要修改类型为对象的状态,建议使用深拷贝(三个点的方式)

无论是纯组件还是普通组件都建议新搞一个数据

相关文章:

7.避免不必要的渲染

目录 1 组件更新机制 2 虚拟DOM配合Diff算法 3 减轻state 4 shouldComponentUpdate() 4.1 基本使用 4.2 使用参数 5 纯组件 5.1 基本使用 5.2 纯组件的比较方法 shallow compere 1 组件更新机制 当父组件重新渲染时,父组件的所有子组件也会重新…...

国产化大趋势下学习linux的必要性

由于国际上的一些国家的制裁和威胁。最近几年国产化大趋势慢慢的兴起,我们国产化硬件的需求越来越大。对国产操作系统的需求也越来越多,那么我们一直用的Windows系统为什么不用了呢?众所周知的原因,不管是最新的Windows11还是正值…...

浅谈虚树

问题引入 你是否遇到过下面这种问题: SDOI2011 消耗战 在一场战争中,战场由 nnn 个岛屿和 n−1n-1n−1 个桥梁组成,保证每两个岛屿间有且仅有一条路径可达。现在,我军已经侦查到敌军的总部在编号为1的岛屿,而且他们已…...

裸机条件下写一个基于时间片轮转的多任务并发程序

目录前言A. 使用RTOSB.裸机多任务并发前言 在学习各种MCU的时候,都是用在main函数里写一个while(1){/* 执行代码 */},这种方式只能一个函数运行完以后再运行另一个函数。 假设需求控制多个模块,如显示屏幕信息的同时控制电机,还要…...

RK3588 系统定制开关机动画

平台:ITX-3588J, ROC-RK3588S-PC 系统:Android12.0 作者:jpchen & zzz 一. 功能描述 定制自己的开机动画和关机动画 二. 功能实现 1.开启功能 修改device/rockchip/common/BoardConfig.mk文件 BOOT_SHUTDOWN_ANIMATION_RINGINGtrue2.…...

水文-编程命令快查手册

前言 脑子里面记不住一些命令,每次遇到都得查下。我经常在三个实体电脑,windows/uos/ubuntu不同系统上编程。 所以web版本的笔记查看起来方便点。这里报错下。 二级标题 cmake windows在cmake --build的时候,使用–config,指定…...

如何优雅编写测试用例

当你学会了如何设计测试用例之后,接下来便是开始用例的编写。 在设计阶段,更准确的说应该是识别测试点的过程,而编写阶段则是将测试点细化成一条条测试用例的过程,有了比较全的用例场景后,如何让别人更舒服、更方便、…...

[入门必看]数据结构2.3:线性表的链式表示

[入门必看]数据结构2.3:线性表的链式表示第二章 线性表2.3 线性表的链式表示知识总览2.3.1 单链表的定义2.3.2_1 单链表的插入删除2.3.2_2 单链表的查找2.3.2_3 单链表的建立2.3.3 双链表2.3.4 循环链表2.3.5 静态链表2.3.6 顺序表和链表的比较2.3.1 单链表的定义单…...

Golang流媒体实战之二:回源

欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 今天的实战是流传输过程中的常见功能:回源如下图,lal(源站)和lal(拉流节点)代表两台电脑,上面都部署了lalVLC在…...

webgl——给场景添加光

文章目录前言光照理论介绍光照效果光源类型反射光颜色向场景中添加光向场景中添加环境光和点光源逐片元光照——更加逼真总结前言 在之前的学习中已经将三维物体添加到了场景中,但是并没有在场景中使用光,照可以使模型更具有立体感,本文主要…...

Vue实战【Vue项目开发时常见的几个错误】

目录🌟前言🌟安装超时(install timeout)🌟can’t not find ‘xxModule’ - 找不到某些依赖或者模块🌟data functions should return an object🌟给组件内的原生控件添加事件,不生效了🌟我在函数内用了this.…...

【多线程】常见的锁策略

✨个人主页:bit me👇 ✨当前专栏:Java EE初阶👇 ✨每日一语:老当益壮,宁移白首之心;穷且益坚,不坠青云之志。 目 录🏳️一. 乐观锁 vs 悲观锁🏴二. 普通的互斥…...

如何让虚拟机里的Ubuntu通过连接手机USB数据线上网

目录 一 前言 二 Windows联网方法 三 Ubuntu联网方法 一 前言 最近遇到了这样一个问题,有一台台式机,地插网口无法访问外网,周边也没有无线路由器,要访问外网,该如何做?进一步的,这台台式机…...

windows渗透(sam、system文件导出)

通过本地PC中渗透测试平台Kali对服务器场景Windows进行系统服务及版本扫描渗透测试,并将该操作显示结果中Telnet服务对应的端口号作为FLAG提交;通过本地PC中渗透测试平台Kali对服务器场景Windows进行系统服...

b01lers(php.galf)

目录 前文 正文 前文 <?phpclass A{public $codeNULL;public $argsNULL;public function __construct($code,$argsNULL){$this->code$code;$this->args$args;print_r("2333") ;} public function __invoke($code,$args){echo $code;print_r("执行inv…...

记一次若依后台管理系统渗透

前言 最近客户开始hw前的风险排查&#xff0c;让我们帮他做个渗透测试&#xff0c;只给一个单位名称。通过前期的信息收集&#xff0c;发现了这个站点&#xff1a; 没有验证码&#xff0c;再加上这个图标&#xff0c;吸引了我注意&#xff1a; 从弱口令开始 若依默认口令为ad…...

Mybatis(四):自定义映射resultMap

自定义映射resultMap前言一、处理字段和属性的映射关系问题&#xff1a;方案一&#xff1a;使用别名方案二&#xff1a;在mybatis-config.xml中设置mapUnderscoreToCamelCase方案三&#xff1a;在映射文件中设置redultMap二、多对一映射处理问题&#xff1a;方案一&#xff1a;…...

机器学习---降维算法

知其然知其所以然【写在前面】主成分分析&#xff08;PCA&#xff09;原理部分代码部分可视化部分线性判别分析&#xff08;LDA&#xff09;原理部分代码部分可视化部分独立成分分析&#xff08;ICA&#xff09;原理部分代码部分可视化部分t-SNE降维算法原理部分代码部分可视化…...

【Vue2从入门到精通】详解Vue.js的15种常用指令及其使用场景

文章目录前言1. v-text / {{ expression }}2.v-html3.v-bind4.v-on5. v-model6.v-for7.v-if / v-else-if / v-else9.v-show10.v-cloak11.v-pre12.组件注册指令13.动态组件指令14.自定义指令15.过滤器指令前言 Vue.js 是一款流行的前端框架&#xff0c;它通过指令&#xff08;Di…...

数据库知识总结

数据库知识点总结个人向。 目录第一章 绪论第二章 关系数据库第三章 关系数据库标准语言SQL第四章 数据库安全性第五章 数据库完整性第六章 关系数据理论第七章 数据库设计第十章 数据库恢复技术第十一章 并发控制第一章 绪论 数据(data): 描述事物的符号记录。 数据库(DataB…...

处理数组循环中删除元素导致索引错位情况

就是很多时候我们对一个数组进行操作的时候&#xff0c;在for遍历的过程中删掉了一个元素&#xff0c;那么在删掉那个元素之后的所有元素的索引值都会减少一位&#xff0c;数组长度缩短一位&#xff0c;删完之后&#xff0c;正在进行的循环会继续循环下去&#xff0c;但是循环的…...

快速排序,分治法实际应用(含码源与解析)

&#x1f38a;【数据结构与算法】专题正在持续更新中&#xff0c;各种数据结构的创建原理与运用✨&#xff0c;经典算法的解析✨都在这儿&#xff0c;欢迎大家前往订阅本专题&#xff0c;获取更多详细信息哦&#x1f38f;&#x1f38f;&#x1f38f; &#x1fa94;本系列专栏 -…...

linux入门---操作体统的概念

什么是操作系统 操作系统是一个对软硬件资源进行管理的软件。计算机由一堆硬件组成&#xff0c;这些硬件遵循着冯诺依曼体系结构 在这个硬件的基础上还有一个软件叫做操作系统 操作系统的任务是对硬件进行管理&#xff0c;既然是管理的话操作系统得访问到底层的硬件&#xf…...

《Qt 6 C++开发指南》提供4个版本的示例程序

《Qt 6 C开发指南》包含丰富的示例项目&#xff0c;为了方便读者使用《Qt 6 C开发指南》学习Qt编程&#xff0c;本书提供了4个版本的示例程序。读者可在人民邮电出版社异步社区本书的配套资源&#xff08;如图1&#xff09;里下载这4个版本的示例程序。图1 异步社区本书配套资源…...

chartgpt 告诉我的,loss 函数的各种知识

一、libtorch中常见的损失函数及其使用场景的总结1. CrossEntropyLoss:CrossEntropyLoss&#xff08;交叉熵损失&#xff09;主要用于分类任务。它适用于多分类问题&#xff0c;其中每个样本只属于一个类别&#xff08;互斥&#xff09;。该损失函数将预测概率与真实标签的one-…...

旅行推销员问题的遗传算法中的完整子路线顺序交叉

摘要 旅行商问题&#xff08;TSP&#xff09;是许多著名的组合问题之一。TSP可以解释为很难找到从第一个城市出发&#xff0c;经过所有城市&#xff0c;然后返回起点的最短距离。在标准问题中&#xff0c;TSP通常用于确定新算法的效率。遗传算法是求解TSP问题的一种成功算法。…...

Python实现词频统计

词频统计是自然语言处理的基本任务&#xff0c;针对一段句子、一篇文章或一组文章&#xff0c;统计文章中每个单词出现的次数&#xff0c;在此基础上发现文章的主题词、热词。 1. 单句的词频统计 思路&#xff1a;首先定义一个空字典my_dict&#xff0c;然后遍历文章&#xf…...

微信小程序面试题(day08)

文章目录微信小程序自定义组件的使用&#xff1f;微信小程序事件通道的使用&#xff1f;微信小程序如何使用vant组件库&#xff1f;微信小程序自定义组件父传子子传父&#xff1f;微信小程序自定义组件生命周期有哪些&#xff1f;微信小程序授权登录流程&#xff1f;web-view。…...

最强的Python可视化神器,你有用过么?

数据分析离不开数据可视化&#xff0c;我们最常用的就是Pandas&#xff0c;Matplotlib&#xff0c;Pyecharts当然还有Tableau&#xff0c;看到一篇文章介绍Plotly制图后我也跃跃欲试&#xff0c;查看了相关资料开始尝试用它制图。 1、Plotly Plotly是一款用来做数据分析和可视…...

Ubuntu使用vnc远程桌面【远程内网穿透】

文章目录1.前言2.两台互联电脑的设置2.1 Windows安装VNC2.2 Ubuntu安装VNC2.3.Ubuntu安装cpolar3.Cpolar设置3.1 Cpolar云端设置3.2.Cpolar本地设置4.公网访问测试5.结语1.前言 记得笔者刚刚开始接触电脑时&#xff0c;还是win95/98的时代&#xff0c;那时的电脑桌面刚迈入图形…...

邢台网上车管所/seo咨询师

项目地址&#xff1a;OhMyBiliBili简介&#xff1a;高仿哔哩哔哩动画安卓客户端介绍 使用到的开源库 1.Rxjava&#xff0c;RxAndroid&#xff0c;Rxbinding&#xff0c;Rxlifecycle&#xff0c;RxBus。2.Okhttp,Retrofit。3.ijkplayer,烈焰弹幕库。4.butterknife,Glide。5.mate…...

织梦网暂时关闭网站/网络推广营销方式

在我们的项目中&#xff0c;常常会碰到图片与文字混排的问题。解决这类问题的方法有非常多&#xff0c;本文给出的方法不是唯一的。仅仅有依据实际场景才干找到更适合的方法。 本文主要通过xml布局来实现图片与文字的混排&#xff08;水平排列&#xff09;。1.利用TextView实现…...

网站推广软文选天天软文/域名注册后如何建网站

为虚拟机中的机器分配ip...

富阳区建设局网站首页/淘宝指数

▼电脑端zoom操作指引▼1、电脑端用户在哪里下载zoom?2、电脑端zoom如何加入会议&#xff1f;3、进入zoom后发现忘记填写正确上课名称&#xff0c;怎么改名&#xff1f;4、如何看到主讲老师或其他参会者&#xff1f;5、听不到声音&#xff0c;怎么办&#xff1f;6、其他注意事…...

做期货在哪个网站看消息/百色seo快速排名

链表08--删除链表中重复节点-jz56题目概述解析&参考答案注意事项说明题目概述 算法说明 在一个排序的链表中&#xff0c;存在重复的结点&#xff0c;请删除该链表中重复的结点&#xff0c;重复的结点不保留&#xff0c;返回链表头指针。 例如&#xff0c;链表1->2->…...

移动网站建设服务商/已矣seo排名点击软件

本专栏由"MATLAB"更名为"MATLAB or Julia", 注意这里的"or"并不是"live or die"里面做选择的意思, 而是数学里面的并集的意思.然后我搜索了一下关键词"MATLAB", 发现我的专栏由原先的第二, 下降到了第七, 第六名是"1关…...