解决React初始化加载组件会渲染两次的问题

 更新时间:2023年08月11日 10:42:23   作者:CoderLiu  
这篇文章主要介绍了解决React初始化加载组件会渲染两次的问题,文中有出现这种现象的原因及解决方法,感兴趣的同学跟着小编一起来看看吧

React组件在初始加载时渲染两次:

import React from 'react'
export default function App() {
  console.log('被加载')
  return <div>App</div>
}

如上在控制台我们会看到输出了两次'被加载'

出现这种现象的原因是:

由于是使用脚手架创建项目,默认会开启严格模式,在严格模式下,React 的开发环境会刻意执行两次渲染,用于突出显示潜在问题。

如果不想出现这个问题,可以将入口文件中的严格模式去除:

ReactDOM.createRoot(document.getElementById('root')).render(
  <React.StrictMode>
    <App></App>
  </React.StrictMode>,
);

ReactDOM.createRoot(document.getElementById('root')).render(<App />)

关于严格模式

StrictMode 是一个用来突出显示应用程序中潜在问题的工具。与 Fragment 一样,StrictMode 不会渲染任何可见的 UI。它为其后代元素触发额外的检查和警告。

严格模式检查仅在开发模式下运行;它们不会影响生产构建。

你可以将整个应用程序或者部分组件包裹在 <React.StrictMode> 标签中,来启用严格模式。

import React from 'react';
const App = () => {
  return (
    <React.StrictMode>
      {/* 你的应用程序组件 */}
    </React.StrictMode>
  );
};
export default App;

严格模式会执行以下检查和优化:

  • 检测过时的生命周期方法:React 在未来版本中可能会移除一些过时的生命周期方法。严格模式会在开发中给出警告,帮助你更早地发现和更新你的代码。
  • 检测不安全的生命周期方法:在未来的 React 版本中,某些生命周期方法可能会在异步渲染模式下不再保证同步调用。严格模式下,如果你在 render 方法中使用了 setState,会收到一个警告。
  • 检测废弃的 context API 使用:严格模式会检查是否存在使用过时的 context API。
  • 检测副作用:严格模式会在渲染两次组件并比较结果后,触发额外的渲染以帮助你检测潜在的副作用问题。
  • 弃用 findDOMNode 的警告:React 17 已经不再支持在严格模式下使用 findDOMNode,会在开发环境中给出警告。

React 的严格模式从 React 16.3 版本开始引入,并且在后续版本中得到了改进和完善。具体来说:

  • React 16.3: 引入了 <React.StrictMode>,用于启用严格模式。它帮助开发者在开发环境下发现潜在问题,并鼓励使用一些最佳实践。
  • React 16.6: 引入了关于生命周期的警告,以帮助开发者在未来适应异步渲染模式。
  • React 16.9: 继续增强了严格模式的功能,包括对不安全的生命周期用法的检测和警告。
  • React 17: 严格模式继续存在,但没有太多的变化。React 17 引入了一些关于副作用的警告,以及在严格模式下弃用 findDOMNode 的警告。

到此这篇关于解决React初始化加载组件会渲染两次的问题的文章就介绍到这了,更多相关React加载组件渲染两次内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • react-router-dom简介(推荐)

    react-router-dom简介(推荐)

    react-router包含三种类型的组件:路由组件、路由匹配组件 、导航组件,在你使用这些组件的时候,都必须先从react-router-dom引入,这篇文章主要介绍了react-router-dom简介,需要的朋友可以参考下
    2022-12-12
  • react如何同步获取useState的最新状态值

    react如何同步获取useState的最新状态值

    这篇文章主要介绍了react如何同步获取useState的最新状态值问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • 将React+Next.js的项目部署到服务器的方法

    将React+Next.js的项目部署到服务器的方法

    本文详细介绍了将React+Next.js项目部署到服务器的步骤,包括服务器环境准备、项目配置与构建、启动服务、配置Nginx反向代理、HTTPS配置、验证与监控以及高级优化,感兴趣的朋友一起看看吧
    2025-03-03
  • react中braft-editor的基本使用方式

    react中braft-editor的基本使用方式

    这篇文章主要介绍了react中braft-editor的基本使用方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09
  • react中fetch之cors跨域请求的实现方法

    react中fetch之cors跨域请求的实现方法

    本篇文章主要介绍了react中fetch之cors跨域请求的实现方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03
  • React+Antd修改Table组件滚动条样式的操作代码

    React+Antd修改Table组件滚动条样式的操作代码

    这篇文章主要介绍了React+Antd修改Table组件滚动条样式的操作代码,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2024-12-12
  • React Router中Link和NavLink的学习心得总结

    React Router中Link和NavLink的学习心得总结

    这篇文章主要介绍了React Router中Link和NavLink的学习心得总结,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • React 组件中的 bind(this)示例代码

    React 组件中的 bind(this)示例代码

    这篇文章主要介绍了 React 组件中的 bind(this) ,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-09-09
  • React中FormData的使用实例详解

    React中FormData的使用实例详解

    FormData 是一个非常灵活的工具,适用于处理表单数据,特别是在需要发送文件或复杂表单数据时,本文给大家介绍React中FormData的使用示例详解,感兴趣的朋友一起看看吧
    2025-04-04
  • 解析React ref 命令代替父子组件的数据传递问题

    解析React ref 命令代替父子组件的数据传递问题

    这篇文章主要介绍了React - ref 命令为什么代替父子组件的数据传递,使用 ref 之后,我们不需要再进行频繁的父子传递了,子组件也可以有自己的私有状态并且不会影响信息的正常需求,这是为什么呢?因为我们使用了 ref 命令的话,ref是可以进行状态的传输
    2022-08-08

最新评论