react原理篇:组件性能优化(减轻state、使用纯组件PureComponent避免不必要的重新渲染)

39 篇文章 2 订阅
订阅专栏
本文探讨了如何通过纯组件(PureComponent)、shouldComponentUpdate钩子和随机数例子来优化React组件渲染,避免不必要的重新渲染,提升性能。涵盖了纯组件的自动优化、比较state与props来决定渲染的策略。
摘要由CSDN通过智能技术生成

目录

一 减轻state

二 避免不必要的重新渲染

2.1 基础使用

 2.2 随机数案例(使用nextState比较)

 2.3 随机数案例(使用nextProps比较)

三 纯组件PureComponent

 3.1 纯组件的基本使用

3.2 纯组件原理


一 减轻state


只存储组件渲染相关的数据(比如count、列表数据、loading等)
注意:不用做页面渲染的数据不要放在state中(比如定时器、id等),可以放在this中

二 避免不必要的重新渲染

2.1 基础使用

组件更新机制: 父组件更新会引起子组件也被更新(子组件没有任何变化也会重新渲染)

:如何避免不必要的渲染?
答:用钩子函数shouldComponentUpdate解决(返回true重新渲染,返回false不重新渲染
→ 该函数属于更新阶段的钩子函数,在组件重新渲染render前执行


完整代码

import React from "react";
import ReactDOM from "react-dom";

class App extends React.Component {
    state = {
        count: 1
    }
    fn = () => {

        this.setState((state, props) => {
            return {
                count: state.count + 1
            }
        }, () => {
            console.log("更新的:" + this.state.count)
        })

    }

    shouldComponentUpdate(nextProps, nextState) {
        //最新的状态
        console.log("nextState:",nextState)
        //更新前的状态
        console.log("this.state:",this.state)
        //返回false 阻止组件重新渲染
        return false;
    }

    render() {
        return (
            <div>
                <p>count:{this.state.count}</p>
                <button onClick={this.fn}>点我</button>
            </div>)
    }
}


ReactDOM.render(<App/>, document.getElementById("root"));

效果

点击按钮3次,state里的count的最新值是4,因为使用了钩子函数shouldComponentUpdate, return 了 false, 所以不重新渲染页面, 所以页面上的count还是1 (备注:this.state里面的count值为3 是因为setState更新数据是异步的,所以count的最新值还没有更新过来)

关于setState异步更新请点这里

 

把钩子函数shouldComponentUpdate的返回值改为true (允许组件重新渲染),点击按钮三次.页面的count值又恢复了

 

 2.2 随机数案例(使用nextState比较)

实现效果: 当两次生成的随机数不一样的时候才重新渲染页面

import React from "react";
import ReactDOM from "react-dom";

class App extends React.Component {
    state = {
        number: 0
    }
    fn = () => {

        this.setState(() => {
            return {
                number:Math.floor(Math.random()*3)
            }
        })

    }

    shouldComponentUpdate(nextProps, nextState) {
        //最新的状态
        console.log("最新的状态:",nextState)
        //更新前的状态
        console.log("上一次的状态:",this.state)

        //当两次生成的随机数是一样的时候,不重新渲染页面
        // if(nextState.number===this.state.number){
        //     return false;
        // }
        // return true;

        //当两次生成的随机数不一样的时候才重新渲染页面
        return nextState.number!==this.state.number
    }

    render() {
        console.log("render")
        return (
            <div>
                <p>随机数:{this.state.number}</p>
                <button onClick={this.fn}>产生随机数</button>
            </div>)
    }
}


ReactDOM.render(<App/>, document.getElementById("root"));

效果

 2.3 随机数案例(使用nextProps比较)

代码

import React from "react";
import ReactDOM from "react-dom";

class App extends React.Component {
    state = {
        number: 0
    }
    fn = () => {

        this.setState(() => {
            return {
                number:Math.floor(Math.random()*3)
            }
        })

    }


    render() {
        console.log("父组件的render")
        return (
            <div>
                <Box number={this.state.number}/>
                <button onClick={this.fn}>产生随机数</button>
            </div>)
    }
}

class Box extends React.Component{
    shouldComponentUpdate(nextProps){
        console.log("最新的props:",nextProps,"上一次的props:",this.props)
        if(nextProps.number!==this.props.number){
            return true;
        }
        return false;
    }
    render(){
        console.log("子组件的render")
        return <p>随机数:{this.props.number}</p>
    }
}

ReactDOM.render(<App/>, document.getElementById("root"));

 效果

三 纯组件PureComponent

 3.1 纯组件的基本使用

为什么要用纯组件?
纯组件内部自动实现了shouldComponentUpdate这个钩子函数,不需要手动比较

使用方法:继承 React.PureComponent
 

 代码

import React from "react";
import ReactDOM from "react-dom";

class App extends React.PureComponent {
    state = {
        number: 0
    }
    fn = () => {

        this.setState(() => {
            return {
                number:Math.floor(Math.random()*3)
            }
        })

    }


    render() {
        return (
            <div>
                <Box number={this.state.number}/>
                <button onClick={this.fn}>产生随机数</button>
            </div>)
    }
}

class Box extends React.PureComponent{

    render(){
        console.log("子组件的render")
        return <p>随机数:{this.props.number}</p>
    }
}

ReactDOM.render(<App/>, document.getElementById("root"));

3.2 纯组件原理

 

 

react-pure:使用 react css 渲染组件的库
06-27
而"react-pure"这个项目,正如其标题所示,是针对React的一个尝试,目的是通过CSS来渲染组件,从而提高性能和代码复用性。 首先,让我们深入了解React的核心概念。React组件是自包含、可重用的代码块,它们各自...
react知识点之ComponentPureComponent深度解析
小糖豆
08-21 6148
ComponentPureComponent的区别 介绍 React.PureComponentReact.Component 几乎完全相同,但 React.PureComponent 通过props和state的浅对比来实现 shouldComponentUpate()。 在PureComponent中,如果包含比较复杂的数据结构,可能会因深层的数据不一致而产生错误的否定判断,导致界面得不到更新。 如果定义了 shouldComponentUpdate(),无论组件是否是 PureCompone
React PureComponent介绍与使用
Boboy
03-18 6273
前言 介绍之前可以先看下shouldComponentUpdate介绍 PureComponent介绍 React15.3中新加了一个 PureComponent 类,顾名思义, pure 是的意思, PureComponent 也就是组件,取代其前身 PureRenderMixin , PureComponent 是优化 React 应用程序最重要的方法之一,易于实施,只要把继承类从 Com...
react组件优化之React.PureComponent,React.memo
最新发布
qq_24428851的博客
08-13 550
在开发中我们经常会考虑项目的优化问题,react作为现在前端的热门框架用的人肯定是非常的多。项目的优化问题也是非常重要的一部分,能大大提高项目的流畅度,用户体验会非常好。react项目中会用到大量的组件嵌套,减少一些组件不必要渲染,可以大大减少损耗。React.PureComponentReact.memo比较相似,都可以控制组件什么时候应该渲染,但是是浅比较,这意味着对于数组和对象不会进行深层次的比较。下面我们来看一个例React.PureComponent要搭配类组件
react-PureComponent
yuey0809的博客
08-03 445
PureComponent是一个组件,如果某个组件继承自它,则该组件的shouldComponentUpdate会进行优化,对属性和状态进行。优化: 如果一个组件的状态和属性都没有发生变化,那么就没有必要重新渲染。用于避免不必要渲染(运行render函数),如果相等则不会重新渲染。...
react组件有计时器情况下,阻止组件重复渲染
lyn1772671980的博客
08-19 688
useMemo memo类似于PureCompoent 作用是优化组件性能,防止组件触发重渲染 memo针对 一个组件渲染是否重复执行 <Foo /> usememo针对 一段函数逻辑是否重复执行 ()=>{} useEffect是在渲染之后完成的 useMemo是在渲染期间完成的 useMemo(()=>{},[]) 参数如果是空数组的话就只会执行一次 useCallback useMemo( ()=>{fn} ) 等价于 useCallback(fn) .
浅谈React组件性能优化
08-27
在这篇文章中,我们将讨论React组件性能优化的几个重要方面,并提供一些实用的优化技巧。 1. 单个React组件性能优化 React利用Virtual DOM来提升渲染性能,Virtual DOM能够计算出对DOM树的最少修改,从而减少DOM...
react-vtree:React组件可有效渲染大型树结构
04-30
React树 该软件包提供了一种轻量级且灵活的解决方案,用于渲染大型树结构。 它建立在库的顶部。 注意力! 该库被完全重写以与react-window 。 如果您要为树视图解决方案,请查看 。 注意:这是版本3.xx的文档。 ...
React如何将组件渲染到指定DOM节点详解
08-29
这篇文章将详细介绍如何使用 React组件渲染到指定的 DOM 节点中。 了解 React 的 render 方法 在 React 中,render 方法是将组件渲染到 DOM 节点中的关键方法。render 方法的函数签名是 `ReactComponent render...
React ComponentPurecomponent区别
weixin_59525879的博客
12-28 568
PureComponent是一个优化过的组件类,它默认实现了一个浅比较的shouldComponentUpdate函数。当组件的props或state发生变化时,PureComponent会对新旧props和state进行浅比较,如果没有变化,则不重新渲染组件Component是一个普通的组件类,它的shouldComponentUpdate函数默认返回true,意味着每次组件的props或state发生变化时都会重新渲染组件。这可能会导致性能问题,特别是当组件包含大量组件时。
React 第二十五章 React.PureComponent
aXin_li的博客
05-08 430
是一个帮助优化性能的组件,通过浅层比较属性和状态的值来避免不必要组件渲染。但需要注意深层比较的情况,以确保组件能够正常地重新渲染
React为啥要用PureComponent代替Component
胡世林的博客
12-04 450
PureComponent 类似于 Component,但是当 props 和 state 与之前保持一致时会跳过重新渲染
react.PureComponent原理与实现
fan2016434589的博客
06-17 426
React.PureComponentReact.Component 的区别在于 React.PureComponen实现了 shouldComponentUpdate(),PureComponent 会对 props 和 state 进行浅层比较,没有变化就不进行渲染,可以提高性能。
react中对PureComponent的深度认识
好好学习
05-10 947
react优化其中最重要的一个组件就是PureComponent,主要的特点就是当数据即使发生深层次的变化,PureComponent也不会更新而且影响到组件。 那PureComponentComponent的之间的联系在哪里,以下是对react框架代码的一些理解。 一、都是从React.js中暴露出来, 删除多此次不相关代码 import {Component, PureComponent} from './ReactBaseClasses'; const React = { Childre
React性能优化React.PureComponentReact.memo
qq_38629292的博客
01-05 469
众所周知,在React中,当父组件重新渲染时,正常情况下会对所有孙级组件进行重新渲染。然而有时候组件其实并未使用组件的任何参数,这时候对孙级的组件进行重新渲染不必要的。这时候我们就需要使用React.PureComponentReact.memo进行性能优化了。
PureComponentReact.memo()区别
qq_43205326的博客
04-23 778
本篇文章主要讲解了,PureComponentReact.memo()区别及用法。
知识梳理------React组件性能优化
杜杜的博客
07-20 363
React 组件性能优化最佳实践 React 组件性能优化的核心是减少渲染真实 DOM 节点的频率,减少 Virtual DOM 比对的频率。 1. 组件卸载前进行清理操作 在组件中为 window 注册的全局事件, 以及定时器, 在组件卸载前要清理掉, 防止组件卸载后继续执行影响应用性能. 需求:开启定时器然后卸载组件,查看组件中的定时器是否还在运行。 import React, { useState, useEffect } from "react" import ReactDOM from "reac
ReactPureComponent
cmchenmei的博客
01-17 274
用于避免重复渲染(执行render函数),提高效率 以下面的示例: // taskContainer 组件 class TaskContainer extends Component { state = { taskList: [] }; componentDidMount() { const task = []; for (let i = 0; i &lt...
写文章

热门文章

  • Navicat Premium操作Mongodb(基本的增删改查) 15267
  • IDEA快捷键(常用)、IDEA恢复默认快捷键 14303
  • Android fragment介绍及基本使用 12767
  • Android Studio 常用快捷键整理 8493
  • IDEA热部署 6952

分类专栏

  • 运营 1篇
  • 生活随笔
  • 自传
  • SpringBoot2 78篇
  • react 39篇
  • 报错 3篇
  • SpringCloud 5篇
  • 数据库 4篇
  • 算法 1篇
  • Android 52篇
  • 音视频开发 3篇
  • Java 80篇
  • 设计模式 22篇
  • JS 3篇
  • Linux 2篇

大家在看

  • 【VUE3.0】动手做一套像素风的前端UI组件库---Radio
  • Linux帮助命令 226
  • 基于SpringBoot的旅游信息管理系统+LW示例参考 746
  • 国内自闭症学校大揭秘!了解治疗自闭症的最佳选择 159
  • 自闭症儿童寄宿学校:打造良好的学习和生活环境 337

最新文章

  • FontCreator如何创建字体
  • 设计模式 组合模式
  • 设计模式 备忘录模式
2024年1篇
2022年224篇
2021年10篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为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 网站制作 网站优化