React如何优化减少组件间的重新Render

news2024/11/17 11:42:25

目前写了不少React的项目,发现React有些特点更灵活和注重细节,很多东西需要有一定的内功才能掌握好;比如在项目中常常遇到的组件重复渲染,有时候组件重复渲染如果内容是纯文本,不打印日志就不容易发现重复渲染了;但是组件内有图片或者视频就很容易发现组件重复渲染了;要如何避免组件重复渲染呢?

下面我们看下代码代码,组件命名比较随意哈:

// App.js
import { useState } from 'react';
import Hello from './components/Hello';

function App() {
  const [count, setCount] = useState(0)
  const handleCount = () => {
    setCount((count) => ++count )
  }
  return (
   <div className="App">
      <header className="App-header">
        <main>
          <button onClick={handleCount}>Click me</button>
          父组件内容 {count}
          <Hello />
          <Hello1 />
        </main>
      </header>
    </div>
  );
}

export default App;

// hello.js
import { memo } from "react"
const Hello = () => {
  console.log('reload1')
  return (
    <div>
      子组件1是否打印更新
    </div>
  )
}

export default memo(Hello);
// hello1.js
import { memo,useEffect, useState } from "react"

const Hello = () => {
  const [count, setCount] = useState(0)
  const handleCount1 = () => {
    setCount((count) => ++count )
  }
  console.log('reload2')
  return (
    <div>
        子组件2是否打印更新
        <br />
        <button onClick={handleCount1}>子组件2++</button>
        <br />
        子组件2的内容 {count}
        <br />
    </div>
  )
}

export default memo(Hello);

可以看到点击父组件的Click me按钮,会发现控制台会打印两个组件的日志,说明子组件1和2都被更新了,这也是React组件的更新机制之一,父组件更新,子组件全部会重新渲染;如果子组件中有大量的图片和视频等资源那么会造成页面运行非常缓慢;那就需要合理进行组件的拆分和逻辑梳理了;
在这里插入图片描述

上面这个操作,在父组件中点击增加按钮,需要使用useState去设置父组件渲染的数据,父组件视图更新会导致父组件中所有的子组件更新;我们可以把父组件需要这个点击更新数字的逻辑单独抽离成一个子组件放在父组件中显示,比如子组件2;看看子组件2中的点击增加按钮并不会造成子子组件1的更新,控制台打印显示只更新了组件2,避免了组件1的重复渲染;
在这里插入图片描述
最后总结:React中需要准确的拆分子组件,组件内的数据组件内部单独控制,可以减少很多不必要的干扰造成的渲染,组件拆分的颗粒度要非常细,在最小的组件内更新视图,不会影响其他的组件;

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

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

相关文章

Maven - 5 分钟快速通关

目录 一、Maven 1.1、 基础语法 1.2、聚合 1.3、继承 1.4、自定义属性 一、Maven 1.1、 基础语法 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/…

RN(React Native)的应用程序在雷电模拟器可以运行,安卓真机运行失败问题解决记录

yarn react-native build-android打包的apk在真机安卓运行提示&#xff1a; Unable to load script . Make sure you re either running Metro ( run npx react - native start ) or that your bundle index . android . bundle is packaged correctly for release . jn…

基于JavaWeb+SpringBoot+Vue超市管理系统的设计和实现

基于JavaWebSpringBootVue超市管理系统的设计和实现 源码传送入口前言主要技术系统设计功能截图Lun文目录订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码传送入口 前言 摘 要 科技进步的飞速发展引起人们日常生活的巨大变化&#xff0c;电子信息技术的飞速发…

适合学生写作业的台灯有哪些?高品质学生读写台灯推荐

不得不说如今我国青少年儿童的近视率还是非常高的&#xff0c;据国家卫健委疾控局数据&#xff0c;我国儿童青少年总体近视率为52.7%&#xff0c;其中6岁儿童为14.3%&#xff0c;小学生为35.6%&#xff0c;初中生为71.1%&#xff0c;高中生为80.5%&#xff0c;造成近视的原因不…

PLC编程速成(二)

目录 操作符 什么是操作符&#xff1f; 变量表&#xff08;数据类型&#xff09; 常用的类型&#xff1a; 变量表图 设置复位指令 如何重复双线圈与解决复双线圈问题&#xff1f; 解决复双线圈 ​编辑 重复双线圈 置复位指令&#xff08;有置位就存在复位&#xff09;…

声量暴涨130%,小红书「待爆」赛道创作指南

近年来&#xff0c;小红书影视板块展现出了旺盛的生命力。热门赛道逼近饱和的当下&#xff0c;内容如何不断推陈出新&#xff0c;成为营销困局。 本期&#xff0c;千瓜将锁定蓄势待发的影视板块&#xff0c;梳理“影视”内容打造方式&#xff0c;助力品牌开疆扩土&#xff0c;抢…

【图像误差测量】测量 2 张图像之间的差异,并测量图像质量(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

离散数学 学习 之 递推方程和生成函数

递推方程 注意这里的特征根一定不是相等 特解的话一般要去设出基本的形式 这是0 次多项式 生成函数

Kepler.gl笔记:地图交互

1 双图 点第一个图标&#xff0c;进入双图 双图可以选择各自显示哪些layer 2 2D图转3D图 点击第二个图标 鼠标拖拽是控制位置 ctrl鼠标拖拽是旋转 3 显示图例

10_博客管理系统

1 项目展示 Express框架可以开发各种不同类型的项目&#xff0c;博客管理系统&#xff08;Blog Management System&#xff09;就是一个比较典型的项目。许多热爱分享技术的程序员都在建立自己的博客&#xff0c;用来发表一些技术文章。 主要完成用户登录、用户管理、文章管理…

Go 循环之for循环,仅此一种

Go 循环之for循环&#xff0c;仅此一种 文章目录 Go 循环之for循环&#xff0c;仅此一种一、for 循环介绍二、for 循环结构2.1 基本语法结构2.2 省略初始值2.3 省略初始语句和结束语句2.4 无限循环2.5 for 循环支持声明多循环变量2.6 小练习&#xff1a;打印九九乘法表 三、for…

随机颜色生成器

项目需求&#xff1a; 要求随机生成颜色 HEX编码格式 快速了解色彩原理可查看&#xff1a;https://zhuanlan.zhihu.com/p/583033395 function randColor(){$str #;for($i 0; $i < 6; $i){ //对应HEX编码六位字符$randNum rand(0,15);switch ($randNum) {case 10: $ran…

2、TCP协议基础

TCP协议基础 1、3次握手建立连接 SYN表示建立连接的标志位&#xff0c;ACK为应答标志位 #mermaid-svg-XQE5icHJvP0vkGP4 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-XQE5icHJvP0vkGP4 .error-icon{fill:#55222…

js精度问题

1、问题场景&#xff1a;请求接口取得Number类型的数字和后端实际值不一致 比如&#xff1a; 后端返回10976458979374929&#xff0c;实际从接口拿到的是10976458979374928&#xff0c;在控制台也会得到这样的结果&#xff1a; 原因&#xff1a; 在JavaScript中&#xff0c;N…

Seata入门系列【5】事务分组原理及应用案例详解

1 事务分组 1.1 概念 事务分组&#xff1a;seata的资源逻辑&#xff0c;可以按微服务的需要&#xff0c;在应用程序&#xff08;客户端&#xff09;对自行定义事务分组&#xff0c;每组取一个名字。 例如以下配置中&#xff0c;定义了当前事务分组名为${spring.application.…

凉鞋的 Unity 笔记 108. 第二个通识:增删改查

在这一篇&#xff0c;我们来学习此教程的第二个通识&#xff0c;即&#xff1a;增删改查。 增删改查我们不只是一次接触到了。 在最先接触的场景层次窗口中&#xff0c;我们是对 GameObject 进行增删改查。 在 Project 文件窗口中&#xff0c;我们是对文件&文件夹进行增删…

Elasticsearch —索引性能技巧

目录 一、科学的测试性能 二、使用批量请求并调整其大小 三、存储 四、段和合并 五、其他 如果你是在一个索引负载很重的环境&#xff0c;比如索引的是基础设施日志&#xff0c;你可能愿意牺牲一些搜索性能换取更快的索引速率。在这些场景里&#xff0c;搜索常常是很少见的…

数据结构题型17-树、森林

文章目录 1 树转换为二叉树2 森林转换为二叉树3 二叉树转换为树4 二叉树转换为森林 1 树转换为二叉树 参考博客&#xff1a;如何将一棵树转化成二叉树 2 森林转换为二叉树 参考博客&#xff1a;树、森林与二叉树的转换 3 二叉树转换为树 参考博客&#xff1a;树、森林与…

开山之作 | YOLOv1算法超详细解析(包括诞生背景+论文解析+技术原理等)

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。目标检测是计算机视觉领域的一项重要研究方向&#xff0c;它在许多应用领域中都得到了广泛应用&#xff0c;如人脸识别、物体识别、自动驾驶、视频监控等。在过去&#xff0c;目标检测方法主要采用基于RCNN、Fast R-CNN等深…

软件工程与计算总结(九)软件体系结构基础

目录 ​编辑 一.体系结构的发展 二.理解体系结构 1.定义 2.区分体系结构的抽象与实现 3.部件 4.连接件 5.配置 三.体系结构风格初步 1.主程序/子程序 2.面向对象式 3.分层 4.MVC 一.体系结构的发展 小规模编程的重点在于模块内部的程序结构非常依赖于程序设计语言…