”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > ReactJS 中的延迟加载:开发人员指南

ReactJS 中的延迟加载:开发人员指南

发布于2024-11-06
浏览:481

延迟加载是 ReactJS 中一项强大的技术,它允许组件或元素仅在需要时才加载,从而增强了 Web 应用程序的性能。在本文中,我们将探讨延迟加载的概念、它的好处,以及如何使用内置的 React.lazy()React.Suspense 特征。
 

什么是延迟加载?

延迟加载是Web开发中常用的一种技术,用于在初始加载时延迟非关键资源的加载。这意味着图像、组件或路由等资源是按需加载的,而不是一次性加载,这可以大大减少初始加载时间并增强用户体验
 

延迟加载的好处

  1. 性能优化:通过将大包分割成更小的块并按需加载,延迟加载显着减少了应用程序的初始加载时间和整体加载时间。
  2. 减少带宽消耗:仅在需要时加载资源,这可以节省带宽,对于网络连接速度较慢的用户特别有用。
  3. 改进的用户体验:通过更快地显示内容并减少第一次有意义的绘制的时间,用户可以体验更快的导航和交互。  

在 React 中实现延迟加载

React 通过 React.lazy() 函数和 React.Suspense 组件提供了对延迟加载的内置支持。这些功能可以轻松实现代码分割和动态加载组件。
 

使用 React.lazy()React.Suspense

  • React.lazy() 是一个函数,可让您将动态导入呈现为常规组件。该函数采用一个返回动态导入(解析为包含默认导出的模块的承诺)的函数并返回一个 React 组件。
  • React.Suspense 是一个组件,允许您定义一个后备 UI,该 UI 将在获取延迟加载组件时显示。您可以在任何层次结构级别使用它,使其能够灵活地延迟加载多个组件。
  • Suspense 的后备属性采用 React 元素,充当占位符内容。它可以是加载旋转器、进度条或您想要在加载时显示的任何其他 React 组件。

例如,考虑一个简单的 Home 组件,我们要在其中延迟加载 About 组件:

Lazy Loading in ReactJS: A Developer Guide
在此示例中:

  • React.lazy()用于动态导入About组件
  • React.Suspense 包裹在惰性组件周围,并在组件加载时使用后备属性来指定加载指示器(例如,旋转器或简单文本)。  

使用延迟加载组件进行错误处理

在处理延迟加载的组件时,加载过程总是有可能由于网络问题或其他错误而失败。为了增强此类情况下的用户体验,您可以使用错误边界来捕获错误并显示自定义错误消息。这是一个例子:

Lazy Loading in ReactJS: A Developer Guide
通过使用 ErrorBoundary 组件 包装 Suspense 组件,您可以确保捕获任何加载错误,并显示后备 UI,而不是空白屏幕。
 

使用 React Router 基于路由的延迟加载

基于路由的延迟加载是一种根据用户导航分割代码的有效方法,特别是在处理大型应用程序时。您可以使用 React.lazy() 仅在需要时动态加载路由组件,而不是预先加载所有路由组件。这是使用 React Router 的示例:

Lazy Loading in ReactJS: A Developer Guide
在此示例中,当用户导航到各自的路线时,主页和产品组件会延迟加载,从而优化应用程序的性能。
 

结论

延迟加载是一种优化 React 应用程序的高效方法,仅在需要时加载组件和资源。它显着提高了性能,减少了带宽使用,并增强了整体用户体验。通过使用 React.lazy() 和 React.Suspense,以及错误边界和基于路由的延迟加载,您可以使您的 React 应用程序更加高效和用户友好。

版本声明 本文转载于:https://dev.to/dualite/lazy-loading-in-reactjs-a-developer-guide-21b3?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 如何将PANDAS DataFrame列转换为DateTime格式并按日期过滤?
    如何将PANDAS DataFrame列转换为DateTime格式并按日期过滤?
    将pandas dataframe列转换为dateTime格式示例:使用column(mycol)包含以下格式的以下dataframe,以自定义格式:})指定的格式参数匹配给定的字符串格式。转换后,MyCol列现在将包含DateTime对象。 date oped filtering > = p...
    编程 发布于2025-07-23
  • Java数组中元素位置查找技巧
    Java数组中元素位置查找技巧
    在Java数组中检索元素的位置 利用Java的反射API将数组转换为列表中,允许您使用indexof方法。 (primitives)(链接到Mishax的解决方案) 用于排序阵列的数组此方法此方法返回元素的索引,如果发现了元素的索引,或一个负值,指示应放置元素的插入点。
    编程 发布于2025-07-23
  • C++成员函数指针正确传递方法
    C++成员函数指针正确传递方法
    如何将成员函数置于c [&& && && && && && && && && && &&&&&&&&&&&&&&&&&&&&&&&华仪的函数时,在接受成员函数指针的函数时,要在函数上既要提供指针又可以提供指针和指针到函数的函数。需要具有一定签名的功能指针。要通过成员函数,您需要同时提供对象指针(此...
    编程 发布于2025-07-23
  • 如何使用不同数量列的联合数据库表?
    如何使用不同数量列的联合数据库表?
    合并列数不同的表 当尝试合并列数不同的数据库表时,可能会遇到挑战。一种直接的方法是在列数较少的表中,为缺失的列追加空值。 例如,考虑两个表,表 A 和表 B,其中表 A 的列数多于表 B。为了合并这些表,同时处理表 B 中缺失的列,请按照以下步骤操作: 确定表 B 中缺失的列,并将它们添加到表的末...
    编程 发布于2025-07-23
  • 为什么不使用CSS`content'属性显示图像?
    为什么不使用CSS`content'属性显示图像?
    在Firefox extemers属性为某些图像很大,&& && && &&华倍华倍[华氏华倍华氏度]很少见,却是某些浏览属性很少,尤其是特定于Firefox的某些浏览器未能在使用内容属性引用时未能显示图像的情况。这可以在提供的CSS类中看到:。googlepic { 内容:url(&#...
    编程 发布于2025-07-23
  • 在JavaScript中如何并发运行异步操作并正确处理错误?
    在JavaScript中如何并发运行异步操作并正确处理错误?
    同意操作execution 在执行asynchronous操作时,相关的代码段落会遇到一个问题,当执行asynchronous操作:此实现在启动下一个操作之前依次等待每个操作的完成。要启用并发执行,需要进行修改的方法。 第一个解决方案试图通过获得每个操作的承诺来解决此问题,然后单独等待它们: co...
    编程 发布于2025-07-23
  • 如何使用Java.net.urlConnection和Multipart/form-data编码使用其他参数上传文件?
    如何使用Java.net.urlConnection和Multipart/form-data编码使用其他参数上传文件?
    使用http request 上传文件上传到http server,同时也提交其他参数,java.net.net.urlconnection and Multipart/form-data Encoding是普遍的。 Here's a breakdown of the process:Mu...
    编程 发布于2025-07-23
  • Python环境变量的访问与管理方法
    Python环境变量的访问与管理方法
    Accessing Environment Variables in PythonTo access environment variables in Python, utilize the os.environ object, which represents a mapping of envir...
    编程 发布于2025-07-23
  • 如何在Chrome中居中选择框文本?
    如何在Chrome中居中选择框文本?
    选择框的文本对齐:局部chrome-inly-ly-ly-lyly solument 您可能希望将文本中心集中在选择框中,以获取优化的原因或提高可访问性。但是,在CSS中的选择元素中手动添加一个文本 - 对属性可能无法正常工作。初始尝试 state)</option> < op...
    编程 发布于2025-07-23
  • 如何在Java字符串中有效替换多个子字符串?
    如何在Java字符串中有效替换多个子字符串?
    在java 中有效地替换多个substring,需要在需要替换一个字符串中的多个substring的情况下,很容易求助于重复应用字符串的刺激力量。 However, this can be inefficient for large strings or when working with nu...
    编程 发布于2025-07-23
  • 反射动态实现Go接口用于RPC方法探索
    反射动态实现Go接口用于RPC方法探索
    在GO 使用反射来实现定义RPC式方法的界面。例如,考虑一个接口,例如:键入myService接口{ 登录(用户名,密码字符串)(sessionId int,错误错误) helloworld(sessionid int)(hi String,错误错误) } 替代方案而不是依靠反射...
    编程 发布于2025-07-23
  • C++20 Consteval函数中模板参数能否依赖于函数参数?
    C++20 Consteval函数中模板参数能否依赖于函数参数?
    [ consteval函数和模板参数依赖于函数参数在C 17中,模板参数不能依赖一个函数参数,因为编译器仍然需要对非contexexpr futcoriations contim at contexpr function进行评估。 compile time。 C 20引入恒定函数,必须在编译时进行...
    编程 发布于2025-07-23
  • 为什么PHP的DateTime :: Modify('+1个月')会产生意外的结果?
    为什么PHP的DateTime :: Modify('+1个月')会产生意外的结果?
    使用php dateTime修改月份:发现预期的行为在使用PHP的DateTime类时,添加或减去几个月可能并不总是会产生预期的结果。正如文档所警告的那样,“当心”这些操作的“不像看起来那样直观。 ; $ date->修改('1个月'); //前进1个月 echo $ date->...
    编程 发布于2025-07-23
  • 在Python中如何创建动态变量?
    在Python中如何创建动态变量?
    在Python 中,动态创建变量的功能可以是一种强大的工具,尤其是在使用复杂的数据结构或算法时,Dynamic Variable Creation的动态变量创建。 Python提供了几种创造性的方法来实现这一目标。利用dictionaries 一种有效的方法是利用字典。字典允许您动态创建密钥并分...
    编程 发布于2025-07-23
  • 为什么Microsoft Visual C ++无法正确实现两台模板的实例?
    为什么Microsoft Visual C ++无法正确实现两台模板的实例?
    The Mystery of "Broken" Two-Phase Template Instantiation in Microsoft Visual C Problem Statement:Users commonly express concerns that Micro...
    编程 发布于2025-07-23

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3