SCU & PureComponent

18 篇文章 0 订阅
订阅专栏
本文探讨了React应用中如何控制组件的render方法调用来提高性能。通过使用shouldComponentUpdate生命周期方法或PureComponent,可以避免不必要的渲染。当props或state改变时,仅在必要时更新组件,减少diff算法的计算,从而提升应用性能。通过实例展示了在父组件状态改变时,子组件如何利用PureComponent避免无谓的渲染。
摘要由CSDN通过智能技术生成

遇到的问题:

        React 在 props 或 state 发生改变时,会调用 React 的 render 方法,会创建一颗不同的树。当一个组件的 render 函数调用时,子组件会重新渲染,子组件的 render 方法也会被调用,而子组件的 state 可能并没有改变过。依次推理,所有的组件都需要重新 render,进行 diff 算法, 性能必然是很低的。调用 render 应该有一个前提,就是依赖的数据(state、props)发生改变时,再调用自己的 render 方法。

如何来控制render方法是否被调用呢?

shouldComponentUpdate

这是一个生命周期函数,在 render 函数执行之前调用。在这个生命周期函数中返回 false,就不会调用 render 函数,返回 true 的时候,调用 render 函数。

shouldComponentUpdate 有两个参数 nextProps (修改之后,最新的 props 属性)、nextState (修改之后,最新的 state 属性)

  shouldComponentUpdate(prevProps, prevState) {
    return prevProps.message !== this.props.message
  }

这样就可以防止父组件调用 render 函数,子组件也跟着调用 render 函数,提高了性能。但是也会产生一个问题: 如果所有的类都需要手动实现 shouldComponentUpdate ,就会增加开发量,类组件继承 PureComponent 之后,默认实现了 shouldComponentUpdate ,就不需要手动写了。

父组件:

import React from "react"
import ChildCpn from "./cpn.js"
class App extends React.Component {
  state = {
    age: 18
  }
  add = () => {
    this.setState({
      age: this.state.age + 1
    })
  }
  render() {
    return (
      <div>
        <span>显示值:{this.state.age}</span>
        <button onClick={this.add}>点击</button>
        <ChildCpn />
      </div>
    )
  }
}
export default App

子组件:

import React, { PureComponent } from "react"
class ChildCpn extends PureComponent {
    render() {
        console.log("子组件render")
        return <div>子组件</div>
    }
}
export default ChildCpn

当父组件的值发生改变之后,字组件不会再调用 render 函数了。 

类组件中可以使用 PureComponent,函数组件需要 高阶组件memo

React性能优化SCU | PureComponent | memo
m0_71485750的博客
10-02 834
并且当我点了一次修改文本按钮时, state中的message已经变成了"你好啊", 当我再次点击修改文本按钮时, state中的message依然是"你好啊", 并没有发生变化, 但是App组件的render函数依然会重新执行, 并且它的子组件Home和About中的render函数也会重新执行。使用memo对函数组件进行包裹, memo调用会返回一个新的组件, 返回这个组件后, 函数组件也会和累组件的PureComponent是一样的效果。事实上,很多的组件没有必须要重新render;
前端知识】React 基础巩固(二十三)——React 性能优化 SCU相关
Outman's blog
07-12 405
React 在 props 或 state 发生改变时,会调用 React 的 render 方法,会创建一颗不同的树。React 需要基于这两颗不同的树之间的差别来判断如何有效的更新 UI。于是,React 对这个算法进行了优化,将其优化成了 O(n)针对类组件:采用PureComponent 实现优化。针对函数式组件:采用 memo 实现优化。render 函数被调用。优化 render 调用。React 的渲染流程。React 的更新流程。
ReactSCU(性能优化篇)
qq_45799465的博客
04-14 1532
shouldComponentUpdate简称SCU,是React中性能优化的重要一环。PureComponent方法。lodash.isEqual方法。
React性能优化——PureComponent & ShouldComponentUpdate详解篇
scu_南的博客
11-30 1335
背景   为了响应公司中台化的战略,6.7月份的时候做了一个中台组件的项目。    组件逻辑比较复杂,而且因为有不同的接入方,需求可能都会不一样,所以都是通过读接口来获取配置,所有的字段依据配置来决定显隐,是否必填,以及各种的校验,联动,并且划分的一些功能模快同样也是走的配置。    以上听起来还是比较复杂的,组件因为包含大量的不同类型的表单,而不同表单又有一些通用的输入框,像文本输入框,时间选择框,所以我们选择以最小颗粒度拆分出一些组件。为了优化
React生命周期 - 前端
Clearlight's Blog
04-20 989
组件的生命周期 概念 每个组件的实例, 从 创建、到运行,直到销毁, 在这个过程中, 会出发 一些列 时间, 这些事件就叫做组件的生命周期函数; React组件生命周期 分为三个部分: 组件创建阶段: 特点: 一辈子只执行一次 componentWillMount: render: componentDidMount: 组件运行阶段: 特点: 按需 根据 props属性 或 ...
React 源码系列-ComponentPureComponent、function Component 分析
止水聊技术
07-31 1087
本文基于 React v16.8.6 以下是使用三种 Component 创建的一个组件 import React, { Component, PureComponent } from 'react'; // function Component function FuncComp() { return <div>FuncComp</div> } // Compone...
React性能优化系列之减少props改变的实现方法
12-08
如果你的组件没有做过特殊的处理(SCU — shouldComponentUpdate或使用PureComponent),那每次父组件render时,子组件就会跟着一起被重新渲染。通常一个复杂的子组件都会进行一些优化,比如:SCU 使用PureComponent...
React高级教程(es6)——(4)ShouldComponentUpdate的用法
热门推荐
liwusen的博客
12-28 1万+
简介:ShouldCompleteUpdate,下文简称SCU,就是指明什么时候component(组件)需要进行更新。1.常见的SCU的用法:(1)比如在下面的例子中,组件中只有2个值,props.color和state.count可以发生改变,我们可以这样使用SCU。class CounterButton extends React.Component { constructor(props
React高级特性
闻人放歌的三寸青草园圃
08-01 832
SCU默认返回true,即React默认重新渲染所有子组件必须配合“不可变值”一起使用可先不用SCU,有性能问题时再考虑使用。
react组件生命周期详解
scu_南的博客
02-22 268
生命周期状态 组件的生命周期可分成三个状态: Mounting:已插入真实Dom Updating:正在被重新渲染 Unmounting:已移除真实Dom 生命周期方法 React为每个状态都提供了两种处理函数,will在进入状态之前调用,did在函数进入状态之后调用,三种状态供给五种处理函数。 componentWillMount 在渲染前调用,在客户端也在服务端。 compon...
程序员面试常考知识点之 前端
scu_南的博客
09-12 450
知识点:JavaScript的hoisting机制(声明提升机制) 1.我是变量声明,我会被提升在作用域顶端! var a; 2.我是变量定义,我的声明部分会被提升,赋值部分不会被提升! var b = 'test'; 3.我是函数定义,或者叫我函数表达式。其实我就是变量定义,只不过恰好被赋值的类型是函数,所以也只提升变量名,不提升函数值! var c = function() {...
SCUCTF
皮三宝好菜的博客
12-25 685
SCUCTF RE re1 拖进ida里一看就出来了 但是提交的时候答案是SCUCTF{}。。。。。。 没搞懂为啥,害得我调试了半天 re2 程序加壳了直接脱了后看伪代码 //第一次写的时候没脱壳。。。因为加密算法比较简答,就是和0x27逐个异或么。。。 上py a = [0x74, 0x5E, 0x5C, 0x75, 0x42, 0x51, 0x14, 0x55, 0x54, 0x42, ...
SCU - 4437 Carries
Foolishman的博客
04-29 246
frog has n integers a1,a2,…,an, and she wants to add them pairwise. Unfortunately, frog is somehow afraid of carries (进位). She defines hardness h(x,y) for adding x and y the number of carries involved...
文件系统设计 - 开发文件系统 Store (上篇)
qq_44746132的博客
09-21 259
本章以一个基础的响应式Store类开始,对编辑器最核心的基础模块-文件系统管理进行开发设计,遵循面向接口编程的理念,设计文件系统的相关接口类型定义。
运行VUE项目运行时候的报错汇总
W3306698294的博客
09-21 105
上面的问题解决问题:【在npm install 后面加 --legacy-peer-deps,就可以解决了】
Babel
小秀的博客
09-20 631
它的主要作用是为了确保在不同浏览器和环境中运行 JavaScript 代码时保持一致的行为,尤其是提供对较新 ECMAScript 特性(如 Promise、Symbol、Object.assign 等)的支持。随着 JavaScript 标准不断更新,新的特性和功能被添加,但并不是所有的浏览器都能及时支持这些新特性。core-js 通常与 Babel 一起使用。core-js 是模块化的,这意味着开发者可以按需引入自己需要的 polyfill,而不是全部引入,这不仅能减少代码体积,还有助于提高性能。
vue复制信息到粘贴框
最新发布
程序员一枚,仅记录工作中的难点
09-21 157
main.js文件引入。
基于Vue 3组合函数的分页、搜索与排序实践 —— nbsaas-boot项目的实际应用
nbsaas-boot基于Request-Response的企业级快速开发框架
09-17 1909
Vue 3的组合函数是用于封装功能逻辑的一种模式。与Vue 2的选项式API不同,组合函数允许开发者将组件逻辑集中封装在独立的函数中,便于在不同的组件间共享。在大型项目中,像这样的电商系统,组件往往需要实现复杂的数据交互逻辑,例如分页、搜索、排序等功能。如果将这些功能重复写在多个组件中,代码将会变得臃肿且难以维护。组合函数可以有效解决这一问题。
Cortex-A5单核配置下的SCU研究与功能解析
"本文主要探讨了ARM架构中的Snoop Controller(SCU)控制器单元,特别是在将Cortex-A5多核处理器裁剪为单核时SCU的功能和配置问题。SCU在多核环境中的主要任务是维护L1数据缓存的一致性、初始化L2 AXI内存访问、仲裁...
写文章

热门文章

  • 缓存Cache-Control 5597
  • 1. webpack 和 webpack-cli 3171
  • 4. browserslist 2632
  • 5. PostCSS 1977
  • pnpm 使用和原理 1861

分类专栏

  • react 18篇
  • webpack 20篇
  • vue3 3篇
  • typescript 1篇
  • promise 1篇
  • 数据结构 5篇
  • 算法 3篇
  • 布局方式 1篇
  • http 5篇
  • nginx 4篇
  • websocket 1篇
  • 移动端开发 1篇
  • 工作中的问题 5篇
  • node 4篇
  • 计算机网络
  • 工程化 3篇

最新评论

  • pnpm 使用和原理

    虎皮猫大人22: pnpm 这套不就是 java 中的 maven 管理 jar 包的方式吗。

  • 1. webpack 和 webpack-cli

    美酒没故事°: 终于知道全局安装和局部安装的区别了

  • 1. webpack 和 webpack-cli

    前端知识: 在当前目录下创建 src 目录,在 src 目录中 创建 index.js文件,作为打包的入口文件

  • 1. webpack 和 webpack-cli

    前端知识: 你是说我截图上面的报错吗

  • 1. webpack 和 webpack-cli

    biubiuduan: 请问一下怎么处理呢?这种报错

大家在看

  • FrameWork后台管理系统源码
  • 导师:自己每天科研工作近10小时,都觉得不够。研究生们,每天科研工作不够5小时,拿什么去竞争? 864
  • 简单题101. 对称二叉树 (python)20240922
  • 基于SpringBoot的旅游信息管理系统+LW示例参考 746
  • Java集合(Map篇) 301

最新文章

  • 图的表示法
  • 视频video.js使用
  • Vue3项目规范
2023年29篇
2022年54篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家漫威玻璃钢雕塑玻璃钢工艺人物雕塑杨泗佛像玻璃钢雕塑广西玻璃钢人物雕塑厂家商场节庆美陈雕塑定制宁德玻璃钢雕塑哪家好上海玻璃钢花盆报价福建个性化玻璃钢雕塑生产厂家白银卡通玻璃钢雕塑设计上海户外商场美陈多少钱河南商场美陈有哪些商场美陈中庭悬挂热带鱼气模河北玻璃钢雕塑施工成品玻璃钢花盆定制邯郸镂空不锈钢玻璃钢仿铜雕塑树脂玻璃钢异形雕塑潍坊玻璃钢卡通雕塑公司湖南园林景观玻璃钢卡通雕塑浙江中庭商场美陈怎么样邵阳玻璃钢雕塑制作厂家玻璃钢雕塑厂靠谱平台漳州玻璃钢花盆厂家开业商场美陈制作苏州玻璃钢雕塑厂家泡沫玻璃钢雕塑现货玻璃钢龙雕塑设计需要多少钱玻璃钢街头雕塑佛山银辉玻璃钢雕塑有限公司济南玻璃钢雕塑摆件市场内江成都商场美陈流程香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化