React 渲染函数render、初始化函数、更新函数运行了两次,原因为何,如何解决? React.StrictMode

文章目录

    • Intro
    • 官网解释
    • 解决
    • 另一篇官网文章——初始化函数或更新函数运行了两次

Intro

我在用 react 写一个 demo ,当我在某个自定义组件的 return 语句之前加上一句log之后,发现:每次页面重新渲染,该行日志都打印了两次!
慌!难道我的自定义组件哪里写得有问题?

第一步验证:找到这个 demo 应用的根节点 App.jsx ,在其 return 语句之前加一行日志,重新渲染页面,观察:日志会被打印几次?
也是两次!

那么错误就不是发生在我的自定义组件处(它总不能影响到外层未修改的组件的行为表现吧)。
以下为我的项目截图:
在这里插入图片描述

官网解释

搜索之后,得出结论:
React 在其升级迭代的过程中,为帮助其用户(众多开发人员)减少升级过程中的bug,提供了一个叫做 StrictMode 的API。这个API有如下特性(见 https://react.dev/reference/react/StrictMode#strictmode ):

  1. 启用范围:可对整个应用(中的组件)启用该模式,也可以对部分组件启用该模式。

  2. StrictMode这个API会导致两次渲染,目的是为了更好地找出程序bug,以修复之(一些已被弃用的、受警告的API也可以被发现,改正)。
    在这里插入图片描述

  3. 启用方式:用React.StrictMode包在想应用该模式的组件外层即可,包在不同层级会影响启用范围大小。

  4. 你会不会担心这个二次渲染影响程序性能?别怕。这个特性仅开发阶段才有,官网原文:development-only
    在这里插入图片描述

解决

既然是官方为减少我们的bug出现率而提供的、仅在开发阶段出现的API特性,那其实我们可以不用很担心 React组件重复渲染对我们程序性能的影响。

如果你还是不喜欢,取消该特性即可。
全局搜索 StrictMode,移除该代码即可(写法略,能碰到这个问题且产生疑问、搜索到此处的同行应该懂怎么移除)。

另一篇官网文章——初始化函数或更新函数运行了两次

初始化函数或更新函数运行了两次
https://zh-hans.react.dev/reference/react/useState#my-initializer-or-updater-function-runs-twice
在这里插入图片描述
图中的内容表述了以下两点:

  1. 为什么我们的 react 组件执行了两次(render渲染方法、构造方法、state更新方法等)?
    这是因为React的设计中,在严格模式(StrictMode)下就是如此(执行两次)。

  2. 这个 “严格模式下 react组件的方法执行两次”的设计目的是什么?
    减少bug(图中下半部分为一个实例)。

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

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

相关文章

HOW - 锚点(Anchor)导航

目录 创建锚点导航目录结构页面内容 说明样式和体验优化关键点总结 在Web开发中,锚点(Anchor)通常用于创建页面内的导航链接,使用户可以点击链接跳转到页面的特定部分。这通常通过HTML中的id属性和链接中的哈希片段实现。 以下是…

vue-loader

Vue Loader 是一个 webpack 的 loader,它允许你以一种名为单文件组件 (SFCs)的格式撰写 Vue 组件 起步 安装 npm install vue --save npm install webpack webpack-cli style-loader css-loader html-webpack-plugin vue-loader vue-template-compiler webpack…

论文阅读Rolling-Unet,卷积结合MLP的图像分割模型

这篇论文提出了一种新的医学图像分割网络Rolling-Unet,目的是在不用Transformer的前提下,能同时有效提取局部特征和长距离依赖性,从而在性能和计算成本之间找到良好的平衡点。 论文地址:https://ojs.aaai.org/index.php/AAAI/article/view/2…

使用nmcli命令创建、删除bond

前言 在之前的文章中,描述的创建bond的方式,是使用配置文件的方式,在创建bond的时候创建一个对应的配置文件,修改、删除都操作此配置文件,这种方式实现bond没有问题,但是对于某些系统下,bond灵…

用链表实现的C语言队列

一、队列概述 在数据结构中,队列是一种先进先出(FIFO)的线性表。它在许多应用场景中非常有用,例如任务调度、进程管理、资源管理等。队列是一种重要的数据结构,其主要特点是先进先出(FIFO, First In First …

618购物狂欢节有哪些数码好物值得抢购?年终必备神器清单大揭秘!

一年一度的“618年中大促”即将拉开帷幕,大家是否已经挑选好了心仪的宝贝呢?那些平时心仪已久的商品,是否总期待着在价格最优惠时收入囊中?毫无疑问,618就是这样一个绝佳的时机,因为各大电商平台都会纷纷推…

python datetime time timedelta

datetime 参考:https://blog.csdn.net/lovedingd/article/details/134929553 time timedelta 参考:https://geek-docs.com/python/python-ask-answer/981_python_formatting_timedelta_objects.html timedelta 是 Python 中的一个类,用于…

怎样为Flask服务器配置跨域资源共享

为了在 Flask 服务器中配置跨域资源共享(CORS),你可以使用 flask-cors 扩展。这个扩展可以帮助你轻松地设置 CORS 规则,从而允许你的 Flask 服务器处理来自不同源的请求。 以下是配置 CORS 的步骤: 安装 flask-cors …

Lecture2——最优化问题建模

一,建模 1,重要性 实际上,我们并没有得到一个数学公式——通常问题是由某个领域的专家口头描述的。能够将问题转换成数学公式非常重要。建模并不是一件容易的事:有时,我们不仅想找到一个公式,还想找到一个…

ansys有限元分析

1.悬臂梁 /prep7 ! 定义单元类型 et,1,beam4 ! 定义材料属性 mp,ex,1,200e9 ! 弹性模量 mp,prxy,1,0.3 ! 泊松比 ! 定义截面属性 sectype,1,beam,rect ! 定义矩形截面 secdata,0.1,0.1 ! 截面宽度和高度 ! 创建节点 n,1,0,0,0 n,2,2,0,0 n,3,4,0,0 n,4,6,0,0 n,5,8,0,…

什么叫做数据字典

数据字典是数据库或信息系统中用来存储关于数据的信息的集合。它包括了数据项、数据结构、数据流、数据存储、处理逻辑等方面的定义和描述。数据字典为系统的分析、设计和维护提供了有关数据的信息,是数据管理和数据维护的重要工具。 通俗地说,数据字典就像是一本“字典”,…

群晖NAS安装配置Joplin Server用来存储同步Joplin笔记内容

一、Joplin Server简介 1.1、Joplin Server介绍 Joplin支持多种方式进行同步用户的笔记数据(如:Joplin自己提供的收费的云服务Joplin Cloud,还有第三方的云盘如Dropbox、OneDrive,还有自建的云盘Nextcloud、或者通过WebDAV协议来…

长沙干洗服务,打造您的专属衣橱

长沙干洗服务,用心呵护您的每一件衣物!致力于为您打造专属的衣橱,让您的每一件衣物都焕发出独特的魅力。 我们深知每一件衣物都承载着您的故事和情感,因此我们会以更加细心的态度对待每一件衣物。无论是您心爱的牛仔裤&#xff0c…

sizeof和strlen

1.sizeof和strlen的对比 1.1sizeof sizeof是计算变量所占内存空间大小的,单位是:字节 如果操作数是类型的话,计算的是使用类型创建的变量所占内存空间的大小。 sizeof只关注占用内存空间的大小,不在乎内存中存放的是什么数据 …

QML Canvas 代码演示

一、文字阴影 / 发光 Canvas{id: root; width: 400; height: 400onPaint: //所有的绘制都在onPaint中{var ctx getContext("2d") //获取上下文// 绘制带阴影的文本ctx.fillStyle "#333" //设置填充颜色ctx.fillRect(0, 0, root.width, root.height…

Stability AI发布新版文生图模型:依然开源

Stability AI最近发布了Stable Diffusion 3 Medium(简称SD3 Medium),这是其最新的文生图模型,被官方称为“迄今为止最先进的开源模型”。SD3 Medium的性能甚至超过了Midjourney 6,特别是在生成手部和脸部图像方面表现出…

前端开发经常用到网站和方法

1、大屏设计相关 组件:介绍 | DataV echarts:Apache ECharts 大屏设计模板:大屏模板 常用图表库:常用图表库 2、UI框架 pc端 element-ui:Element 移动端 3、在线工具 免费版 在线流程图:在线画图工具…

一杯咖啡的艺术 | 如何利用数字孪生技术做出完美的意式浓缩咖啡?

若您对数据分析以及人工智能感兴趣,欢迎与我们一起站在全球视野关注人工智能的发展,与Forrester 、德勤、麦肯锡等全球知名企业共探AI如何加速制造进程, 共同参与6月20日由Altair主办的面向工程师的全球线上人工智能会议“AI for Engineers”…

java定时任务 设置开始时间、结束时间;每周一、四、六执行;并且隔n周执行。最后计算所有执行时间

java定时任务 设置开始时间、结束时间;每周一、四、六执行;并且隔n周执行。最后计算所有执行时间) 定时任务需求程序设计依赖引入程序一、计算开始时间那周的周一时间二、根据executeTime和weekList.get(n),计算每个cron表达式。三、根据一和…

可以自定义的文字识别OCR

可以自定义的文字识别OCR 什么是OCR文档自学习自定义模板单证票据信息抽取操作体验 这里提到的可以自定义的文字识别OCR ,其实就是OCR文档自学习。 什么是OCR文档自学习 什么是OCR文档自学习呢?OCR文档自学习,是面向“无算法基础”的企业与个…