React渲染执行两次

news/2025/4/1 8:54:39/文章来源:https://www.cnblogs.com/liubenben/p/18800046

在 React 18 中,严格模式(StrictMode)会导致组件在开发模式下执行两次。这是为了帮助开发者检测潜在的问题和副作用。

严格模式的作用
严格模式是一个用于突出显示应用程序中潜在问题的工具。它不会渲染任何可见的 UI,而是为其后代元素触发额外的检查和警告

严格模式的主要作用包括:
检测不安全的生命周期方法:例如,使用过时的字符串 ref API 和 findDOMNode 方法。
检测意外的副作用:例如,useEffect 的副作用。
检测过时的 context API。

为什么会执行两次
在严格模式下,React 会故意调用组件的函数两次,以帮助开发者发现副作用
例如,对于函数组件,React 会调用 useState、useMemo 或 useReducer 两次,以确保这些函数是纯函数

import React, { useState, useEffect } from 'react';function Count() {const [counter, setCounter] = useState(0);useEffect(() => {console.log("effect");setTimeout(() => {setCounter(counter + 1);}, 3000);}, [counter]);console.log("before render");return (<div className="container"><div className="el">{counter}</div></div>);
}export default Count;

在上述代码中,before render 和 effect 会在初次渲染时打印两次,这是因为严格模式会多执行一次,以确保组件是纯函数。

如何解决
仅在开发者模式下运行,不影响生产构建
如果不希望组件在开发模式下执行两次,可以暂时关闭严格模式, 删除React.StrictMode。但这样做会失去一些重要的调试帮助

import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';ReactDOM.render(<App />,document.getElementById('root')
);

总结来说,React 严格模式在开发模式下会重复调用组件,以帮助开发者检测潜在的问题和副作用。这虽然会导致组件执行两次,但有助于确保代码的纯度和安全性

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

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

相关文章

mysql日志写马

mysql日志写马 条件 1.全局变量general_log为ON。 mysql有两个全局变量:general_log指的是日志保存状态,值为ON/OFF,general_log_file指的是日志的保存路径。 只有当general_log为ON时,日志才会被记录进去,所以我们要先打开这个全局变量,使用命令查看全局变量状态‘ show…

滚动部署学习指南:从理论到实践,掌握关键技术和流程

一、滚动部署概述 (一)定义 滚动部署是一种逐步更新应用实例的策略,通过逐批次替换旧版本实例来完成版本升级,以减少服务中断时间并降低更新风险。 (二)应用场景 滚动部署适用于需要高可用性和低风险的软件更新场景,例如 Web 应用程序更新、移动应用后端服务更新以及云原…

ctfshow-web入门-爆破(web21-web28)

web21 打开后要求登录附件是一个密码字典使用bp抓包,将抓到的东西进行base64解码发现是admin:密码的键值对添加payload,padload类型为自定义迭代器,位置1为admin:位置2为导入的字典添加base64编码和取消url编码然后开始攻击,发现长度和其他不同的包,查看响应,发现flagweb…

灰度发布学习大纲:从理论到实践,掌握关键技术和流程

一、灰度发布概述 1. 定义与别名灰度发布:一种渐进式的软件发布策略,也被称为金丝雀发布(Canary Release)。 目的:通过逐步向用户群体推送更新,降低新版本引入的潜在风险,提升用户体验,实现不停机的热迁移。2. 灰度发布的优势降低风险:逐步验证新版本的稳定性。 快速反…

代码随心录第三天|Leecode 203.移除链表元素 707.设计链表 206.反转链表

1、Leecode 203.移除链表元素 题目链接:https://leetcode.cn/problems/remove-linked-list-elements/description/ 题目描述:解题思路:移除操作就是让节点next指针直接指向下下一个节点,因为单链表的特殊性,只能指向下一个节点,所以头节点需要单独考虑,这种方法是直接使…

【THM】Linux Privilege Escalation

Linux Privilege Escalation/Linux 权限提升 什么是权限提升 “权限提升”是什么意思? 权限提升通常涉及从较低权限的帐户到较高权限的帐户。 从技术上讲,它是利用操作系统或应用程序中的漏洞、设计缺陷或配置疏忽来获得对通常限制用户访问的资源的未经授权的访问。 权限提升…

kettle从入门到精通 第九十三课 ETL之kettle kettle 调用web service接口5种方法,一文彻底搞懂

场景:群里有小伙伴向我求助如何调用web service接口,趁着周末时间,给兄弟们搞demo。 1、本次使用的web service服务接口地址是http://ws.webxml.com.cn/WebServices/WeatherWS.asmx?op=getSupportCityDataset, 此接口根据用户输入的城市名称可获取城市下属单位,如下图所示…

分享一款替代 GitLab 的开源软件 gogs ,适合中小企业,非常优秀!

这篇文章,分享一款替代 GitLab 的开源软件 gogs ,Github 上有 4 万多颗 star ,笔者认为它非常优秀 ,适合中小企业。1 Gogs 简介 Gogs 是一款极易搭建的自助 Git 服务,它使用 Go 语言开发,只要 Go 语言支持的平台它都支持,包括 Linux 、Mac OS X、Windows 以及 ARM 平台。…

【闲话 No.3】 并查集相关

并查集的复杂度证明及可持久化。命に嫌われている。 小唐话 感觉有的时候已经无法与人正常交流,净做唐事、说些唐话了。或许是我无法准确猜到别人喜欢什么吧。 不过还是自己心底一点 joker 之心/私心作祟吧。 感觉我有时做的唐事真的挺对不起大家的。 可我又怎么战胜心底的那…

3.29 学习记录

实现了科技页面的树状图查询和分页查询

Django - admin djangoql

效果: 1. pip installpip install djangoql 2. settings.pyINSTALLED_APPS = [djangoql, ] 3. admin.pyfrom django.contrib import admin from djangoql.admin import DjangoQLSearchMixinfrom .models import *@admin.register(User) class UserAdmin(DjangoQLSearchMixi…