React组件渲染优化

React组件渲染优化与性能提升实践 React框架中的虚拟DOM和组件化开发是现代前端工程的核心技术。通过diff算法实现高效的DOM更新是React的核心原理,这种机制显著提升了Web应用的性能表现。在大型应用开发中,组件重新渲染优化成为关键性能指标,特别是对于高频交互场景和复杂数据可视化项目。React提供了多种优化手段,包括PureComponent的浅比较策略、React.memo高阶组件以及useMemo/useCallback等Hooks API。这些技术通过减少不必要的虚拟DOM计算和DOM操作,有效降低了CPU开销和内存占用。 阅读详情

CartList.js

import React, { Component, PureComponent } from 'react';

class CartList extends Component {
    constructor(props) {
        super(props);
        this.state = {
            goodsList: []
        }
    }

    componentDidMount() {
        // 每秒改变一次数据
        setInterval(() => {
            this.setState(() => ({
                goodsList: [
                    {
                        name: '商品1',
                        price: 10
                    }
                ]
            }))
        }, 1000);
    }

    render() {
        return (
            <div>
                {
                    this.state.goodsList.map(item => {
                        return <CartItem goods={item} key={item.name}></CartItem>
                    })
                }
            </div>
        )
    }
}

export default CartList;

CartItem.js

function CartItem(props) {
    console.log('render');
    
    const { name } = props.goods;
    return (
        <div>{name}</div>
    )
}

CartItem中,每秒打印两次render,两次是因为使用了严格模式,再index.js中去掉React.StrictMode即可


上面的渲染方式,每秒改变一次数据,虽然实际内容并没有发生变化,但还是会重新渲染,这会带来不必要的性能消耗
改写 CartItem,使其继承 PureComponent,在数据不变的情况下,不会重新渲染

注意:PureComponent只进行浅比较,下面这种写法props接收的是goods对象,浅比较是比较的内存地址,每次的goods对象都是一个新的地址,所以还是会重新渲染

class CartItem extends PureComponent {
    render() {
        console.log('render');
        const { name, price } = this.props.goods
        return (
            <div>
                <p>{name}</p>
                <p>{price}</p>
            </div>
        );
    }
}

为解决上面的问题,需要改变CartItem的传值方式,改为接收对象中的每个属性值

return <CartItem name={item.name} price={item.price} key={item.name}></CartItem>
// 也能简写为
return <CartItem {...item} key={item.name}></CartItem>
class CartItem extends PureComponent {
    render() {
        console.log('render');
        const { name, price } = this.props
        return (
            <div>
                <p>{name}</p>
                <p>{price}</p>
            </div>
        );
    }
}

PureComponent使用原则

1、PureComponent一般会用在一些纯展示组件上。切记props和state不能使用同一个引用,否则无法更新组件 2、在通过PureComponent进行组件的创建的时候不能够再写shouldComponentUpdate,否则会引发警告
避免 React 组件重渲染的优化方法 React.memo 是函数组件的优化版本,它通过对组件的 props 进行浅比较来决定是否重新渲染组件。然而,有时候组件的重复渲染可能会导致性能问题,特别是当组件具有大量的子组件或者复杂的渲染逻辑时。当组件的 props 或 state 发生变化时,如果引用没有改变,React 会认为组件没有发生变化,从而跳过重新渲染。在函数组件中,每次重新渲染都会创建新的函数实例,这可能导致子组件的不必要渲染。然而,需要注意的是,优化并不总是必要的,只有在组件重渲染成为性能瓶颈时才需要考虑进行优化。 阅读详情

相关推荐

React Native中组件渲染与性能优化

本文介绍了在React Native中如何使用组件构建跨平台图片信息流应用,包括如何处理组件状态和渲染性能优化。我们学习了如何创建自定义组件、处理数据加载状态,并通过shouldComponentUpdate方法减少不必要的组件渲染,提高应用性能。

weixin_29323977的博客 460

js查找数组中某值的方法及分析合集,应该如何选择,时间复杂度如何?includes时间复杂度和hashMap比如何

js查找元素函数如何选择,includes时间复杂度,findIndex时间复杂度,查找函数应该怎么选择

weixin_45912061的博客 1094

BMS | 从一串到几百串硬件架构简介

锂电池在生活中越来越多的方面扮演能源的角色,除了大家熟知的电动汽车行业,在一些消费类,工业类电子产品比如手机,电动自行车,电动工具中都有应用,追本溯源今天我们一起来学习下最基础的BMS架构。 1~4串架构 以S8241为代表的无通信/无固件/模拟器件 可实现过充保护、过放保护、过流/短路,参数由器件后缀代码决定;通信类手持设备供电系统;1~4节电池保护板架构 如图使用S-8241系列保护IC,一对充放电MOS管控制充放电的回路的切断和接通,系统供电来自于电芯电压,VM引脚用于检测过...

ningvay的博客 9918

React中如何提高组件的渲染效率

在实际开发过程中,前端性能问题是一个必须考虑的问题,随着业务的复杂,遇到性能问题的概率也在增高除此之外,建议将页面进行更小的颗粒化,如果一个过大,当状态发生修改的时候,就会导致整个大组件的渲染,而对组件进行拆分后,粒度变小了,也能够减少子组件不必要的渲染。

Ming_xm的博客 506

Unified Access Control:从NAS到RRC的5G接入控制全流程解析

本文深入解析了5G统一接入控制(Unified Access Control)的全流程,从NAS到RRC的协同工作机制。通过身份核验、业务分类和动态决策三个核心步骤,UAC实现了智能调度和弹性决策,确保海量设备接入时的网络稳定性。文章详细介绍了USIM卡的身份凭证体系、NAS层的业务分类引擎以及RRC层的动态决策机制,并提供了实战案例和常见问题排查方法。

weixin_30855099的博客 589

实战Nocobase插件开发:如何用yarn pm命令快速创建和测试API接口插件

本文详细介绍了如何使用Nocobase插件开发工具快速创建和测试API接口插件,涵盖从环境配置、插件骨架生成到数据模型定义和接口实现的完整流程。通过yarn pm命令简化开发步骤,帮助开发者高效构建支持CRUD的API插件,适用于低代码平台开发场景。

weixin_29313239的博客 457

解决 element-ui下Cascader 数据太多显示不完全的问题

vue电商项目中,商品分类功能 代码: <!-- options数据源 props配置选项 checkStrictly级联选中任意一级--> <el-cascader :options="parentCateList" :props="cascaderProps" v-model="selectedKeys" @change="parentCateChange" cleara

Mikon_0703 3947

PostgreSQL的学习心得和知识总结(八十二)|深入理解PostgreSQL数据库SQL语句的词法解析和语法解析流程

postgresql 词法解析语法解析流程

孤傲小二~阿沐的博客 5448

分析 React 组件的渲染性能

今天,我们介绍一下如何使用 React Profiler API 分析 React 组件的渲染性能。出于演示目的,我们将使用一个电影排队 APP 。The React Profiler ...

前端劝退师 1558

Hermes Agent 安装部署完全指南

Hermes Agent安装部署指南提供了两种安装方式:一键脚本安装和手动分步安装。该AI助手支持多平台运行(Linux/macOS/WSL2),核心功能仅需Git作为前置依赖,其他依赖如Python、Node.js等均由安装脚本自动处理。文档详细介绍了系统要求、依赖管理、配置目录结构、环境变量设置以及10个手动安装步骤,并提供了功能模块化选项,用户可根据需求选择安装语音交互、浏览器自动化等扩展功能。安装完成后可通过hermes doctor命令验证环境,并通过交互式向导完成初始化配置。

简简单单Onlinezuozuo 2621

万字长文解密:SAP Fiori 首屏加载缓慢背后的真相

什么是一个健康理想的 Fiori 首次加载状态?FLP 首页不臃肿,用户默认看见的内容不多但足够用缓存作业按规则运行,冷启动不至于每次都从零开始应用首屏只读必要数据,UI5 资源经过 preload,视图异步加载OData 服务字段克制、分页合理、缓存分层清楚后台 CDS 与 HANA 只为当前屏幕做最必要的工作。只要这些标准同时满足,用户第一次打开 Fiori 页面的体感通常会从明显卡顿变成可接受甚至顺滑。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 557

react +Antd Cascader级联选择使用接口数据渲染

2使用自定义Cascader级联选择组件。1获取接口数据并将数据转换成树形数组。

weixin_59525879的博客 1154

基于Simulink的MIMO-OFDM系统仿真建模示例

MIMO概述MIMO技术利用多个天线进行信号发送和接收,通过空间复用来提高数据传输速率,或通过空间分集来增强信号的可靠性。OFDM概述OFDM是一种将高速率数据流分成多个低速数据流并行传输的技术,每个子载波都采用调制方式(如BPSK、QPSK),并通过IFFT/FFT变换实现串并转换。MIMO-OFDM优势结合了MIMO的空间分集增益与OFDM对抗多径效应的能力,适用于宽带无线通信系统。提供了更高的数据速率和更好的频谱效率,是现代无线通信标准(如4G LTE、5G NR等)的核心技术之一。

xiaoheshang_123的博客 327

React之组件渲染性能优化

下面对React.memo和useMemo特性React.memouseMemo主要功能缓存组件,防止不必要的渲染缓存回调函数缓存计算结果使用场景当传入的 props 没有变化时,避免组件重新渲染传递函数到子组件时,避免重新渲染时重新创建该函数避免在每次渲染时,进行不必要的昂贵计算依赖项根据 props 变化根据依赖数组变化根据依赖数组变化返回值类型返回新的组件返回记忆化的函数返回记忆化的值。

jydchudq的博客 1384

LoveSQL

LoveSQL(SQL注入详解) 1、根据题目,显然想到的是sql注入漏洞,直接尝试万能密码 2、此时url构造,查看字段数 /check.php?username=admin' order by 3%23&password=1 # 存在 /check.php?username=admin' order by 4%23&password=1 # 报错 因此,得到总共有三个字段数 注意:url中不能用#,应该用url编码%23 3、用union来查询测试注入点,查看回显点

lunan的博客 1562

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

React前端渲染优化——父组件导致子组件重复渲染

本篇文章是针对父组件导致子组件重复渲染的优化方法 一、 说明 目前我们所使用 react 版本一般会有以下四种方式触发渲染 render,而其中通过父组件 render 会直接通知子组件也进行 render。 二、一般的优化方式 鉴于此种情况,如果完全不做控制下,父组件 render, 那么子组件一定会 render。真实 dom 的渲染 react 会在 diff 算法之后合计出最小改动,进行操作。但对于结构复杂页面,自顶向下,只是单纯 diff 也要花费很长的时间来处理 js 任务。再加上我们每个组件

hello__word__的博客 4756

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

React 组件Update重新渲染优化

目录 1.无用的渲染 2.类组件Update优化 -- shouldComponentUpdate生命周期函数 3.类组件Update优化 -- 继承PureComponent组件 4.函数组件Update优化 -- React.memo() 原文链接:Improving Performance in React Functional Component using React.memo 原文作者:Chidume Nnamdi 译者:进击的大葱 推荐理由: 本文讲述了开发React应用时如何...

wdquan19851029的专栏 2106

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

react组件渲染优化-类组件渲染优化

某些值或者,但用户点击了;整个组件仍然是了的。显然,这一次渲染是没有必要的。使用来决定是否渲染。

weixin_44072254的博客 465

React组件重复渲染的成因与优化策略

React 组件的重复渲染是性能优化中的关键问题。通过合理使用React.memo和、优化useEffect和、避免内联函数和对象、优化 Context API 的使用以及按需加载组件,可以有效减少不必要的渲染。希望本文的优化策略能帮助你在 React 开发中提升应用性能。最后问候亲爱的朋友们,并邀请你们阅读我的全新著作📚《 React开发实践:掌握Redux与Hooks应用 》

有我更精彩的博客 1192

性能优化:React 组件渲染与代码分割策略

性能优化:React 组件渲染与代码分割策略

欢迎来到这里,希望文章能对你有所帮助 1206

React.js 中组件重渲染性能问题及优化方法

在 React.js 开发中,组件重渲染性能问题是一个常见的问题。通过避免不必要的重渲染、优化深层嵌套组件的重渲染、正确使用React.memo、正确使用和useMemo以及使用或,可以有效解决这些问题。希望本文的介绍能帮助你在 React.js 开发中更好地管理组件重渲染,提升应用的性能和用户体验。最后问候亲爱的朋友们,并邀请你们阅读我的全新著作📚《 React开发实践:掌握Redux与Hooks应用 》

有我更精彩的博客 1303

使用 useMemo 和 React.memo 优化 React 组件渲染

在 React 中,性能优化是一个重要的主题,特别是在复杂的组件树中。本文将演示如何在同一个父组件中使用 useMemo 和 React.memo 来优化子组件的渲染。

2301_76662406的博客 810

[React]组件渲染性能优化

可以看到,在更新子组件的数据时,由于数据是从父组件传递下去的,相当于更新了父组件数据,那么父组件就会重新渲染,最终导致的结果就是父组件下面所有的子组件都重新渲染了。的生命周期钩子函数,该函数会在渲染执行之前被调用,函数内部能够接收到新的属性和新的状态,我们要做的就是让新的属性和状态和当前的属性以及状态进行浅比较,如果相同则返回。可以看到,父组件的更新会导致两个子组件更新,这是正常的,子组件各自的更新不会影响其他组件。的状态时,子组件也会跟着更新,原因很简单,因为父组件更新了,那你子组件当然要重新更新。

m0_51514727的博客 1075

react 父子组件的渲染机制 | 优化手段

本方法与组件形式引用的区别:组件重新渲染其实是执行render方法, 如果子组件采用组件形式引入(可以理解为这里引入的是子组件render方法的执行结果。但有些场景下我们并不希望所有的子组件都重新渲染,比如在一个列表中,我们只希望重新渲染单击受新选择影响的这项。有时无法轻易的把一个组件单独的独立提取出来,此时可以把带状态的组件提取出来,然后把耗时的组件作为。方法是一个高阶函数,参数是一个组件A,返回包装过的新组件B。比如选中的子组件高亮,父组件维护一个选中子组件的。发生变化,才会触发组件重新渲染。

好好学习天天向上 2655

React性能优化:避免不必要渲染,提升组件渲染效率

本文介绍了React应用开发中避免不必要渲染的优化方法。主要包括:使用PureComponent或React.memo进行浅比较优化;通过shouldComponentUpdate自定义更新逻辑;采用Immutable数据结构提高比较效率;优化列表渲染时使用key属性和虚拟列表技术;以及组件拆分、懒加载和避免内联函数等辅助优化措施。这些方法能有效提升组件渲染效率,改善应用性能,开发者可根据实际场景选择适合的优化方案。

你若盛开,清风自来 1055
上一篇: antd按需加载
下一篇: React高阶组件
My_Java_Life
博客等级 码龄11年 39粉丝 61原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值