首页 > 其他分享 >React 入门第十天:代码拆分与懒加载

React 入门第十天:代码拆分与懒加载

时间:2024-09-24 15:51:34浏览次数:10  
标签:lazy 第十天 代码 React 拆分 组件 加载


在第十天的学习中,我把重点放在了React的代码拆分和懒加载技术上。这些技术不仅能有效减少应用的初始加载时间,还能提升用户体验。随着应用的功能逐渐增加,如何确保应用性能保持高效,成为了一个必须解决的问题。

1. 为什么需要代码拆分?

在开发大型React应用时,所有的代码通常会被打包成一个大的JavaScript文件。当应用的功能越来越复杂,这个文件的体积也会随之增大,从而导致加载时间变长,特别是在网络状况不佳的情况下。

代码拆分允许我们将应用的代码按需加载,只在用户需要时才加载对应的部分。这样做不仅可以减少初始加载时间,还能有效地提升应用的整体性能。

2. 使用React.lazySuspense实现懒加载

React 提供了React.lazySuspense两个工具,用于实现懒加载组件。

2.1 React.lazy的使用

React.lazy允许我们定义一个动态加载的组件,它只有在需要时才会被加载。

import React, { Suspense } from 'react';

const LazyComponent = React.lazy(() => import('./LazyComponent'));

function App() {
  return (
    <div>
      <h1>欢迎使用我的应用</h1>
      <Suspense fallback={<div>加载中...</div>}>
        <LazyComponent />
      </Suspense>
    </div>
  );
}

export default App;

在上面的代码中,LazyComponent 是一个懒加载的组件,它会在App组件渲染时按需加载。Suspense 组件用于包裹懒加载的组件,并提供一个fallback属性,用于在组件加载时显示加载指示器。

2.2 处理错误边界

懒加载的过程中可能会出现加载失败的情况,例如网络错误或服务器问题。为了提高用户体验,我们可以使用React的错误边界来捕获这些错误,并向用户展示友好的错误信息。

import React, { Suspense } from 'react';

const LazyComponent = React.lazy(() => import('./LazyComponent'));

class ErrorBoundary extends React.Component {
  constructor(props) {
    super(props);
    this.state = { hasError: false };
  }

  static getDerivedStateFromError(error) {
    return { hasError: true };
  }

  componentDidCatch(error, errorInfo) {
    console.error("Error loading component:", error, errorInfo);
  }

  render() {
    if (this.state.hasError) {
      return <h1>加载组件时出错了。</h1>;
    }

    return this.props.children;
  }
}

function App() {
  return (
    <div>
      <h1>欢迎使用我的应用</h1>
      <ErrorBoundary>
        <Suspense fallback={<div>加载中...</div>}>
          <LazyComponent />
        </Suspense>
      </ErrorBoundary>
    </div>
  );
}

export default App;

在这个例子中,ErrorBoundary 组件负责捕获懒加载过程中发生的错误,并提供一个优雅的错误提示。

3. 代码拆分的最佳实践

  • 按路由拆分:这是最常见的代码拆分方式,根据应用的路由划分模块,确保每个页面只加载当前所需的代码。
  • 按组件拆分:对于那些可能不会在初次加载时使用到的重型组件,可以将其单独拆分成一个模块,待需要时再加载。
  • 使用工具分析:在代码拆分后,可以使用工具如webpack-bundle-analyzer来分析最终打包的文件,确保拆分达到了预期效果。

4. 小结与展望

在第十天的学习中,代码拆分与懒加载技术让我意识到性能优化的重要性。通过合理的代码拆分,不仅能提升应用的加载速度,还能减少不必要的资源浪费,为用户提供更流畅的使用体验。


标签:lazy,第十天,代码,React,拆分,组件,加载
From: https://blog.51cto.com/u_17032682/12100515

相关文章

  • React 入门第九天:与后端API的集成与数据管理
    在React学习的第九天,我集中学习了如何与后端API进行集成。这一步是将静态的React应用转变为动态、可交互的关键。通过与后端通信,我们可以从服务器获取数据、发送用户输入以及处理复杂的业务逻辑。1.使用fetch进行数据请求React没有内置的HTTP库,因此我们通常使用浏览器提供的fetch......
  • 如何使用 pygame.image.load() 加载图像?
    我只是想知道语法。如何使用pygame.image.load()加载图像?举个例子,我想加载一个名为cat.png的图像-并输入这个pygame.image.load('cat.png')那么,图像cat.png应该保存在哪里?当然可以,让我们来分解一下如何使用Pygame加载图像。1.导入和初始化首先,你......
  • React的useId,现在Vue3.5终于也有了!
    前言React在很早之前的版本中加了useId,用于生成唯一ID。在Vue3.5版本中,终于也有了期待已久的useId。这篇文章来带你搞清楚useId有哪些应用场景,以及他是如何实现的。关注公众号:【前端欧阳】,给自己一个进阶vue的机会useId的作用他的作用也是生成唯一ID,同一个Vue应用里面每次调用......
  • react native的notifee消息
       reactnative上的notifee组建可发送localnotification和remotepushnotification,可订阅各种Event。我使用的是localnotification。另一个与之对应的是exponotification,也是很好的组建,但我的app未来想用bare类型,脱离expo,所以优先选择notifee。官方文档:https://notife......
  • React hooks子组件暴露方法示例
    说明通常情况下,React 子组件使用父组件的方法或值通过props传递,反过来,父组件如果需要子组件的方法就需要子组件将自己的方法暴露出去。以下是一个实例:User.tsximportReact,{FC,useEffect,useState,useRef}from'react';import{Button,Table}from'antd';impor......
  • 【艾思科蓝】前端框架巅峰对决:React、Vue与Angular的全面解析与实战指南
    【JPCS独立出版】​第三届能源与动力工程国际学术会议(EPE2024)_艾思科蓝_学术一站式服务平台更多学术会议请看:https://ais.cn/u/nuyAF3 引言在快速发展的前端技术领域,选择合适的框架或库对于项目的成功至关重要。React、Vue和Angular作为当前最流行的三大前端框架/库,各自......
  • 长列表加载性能优化
    一、长列表优化概述        列表是应用开发中最常见的一类开发场景,它可以将杂乱的信息整理成有规律、易于理解和操作的形式,便于用户查找和获取所需要的信息。应用程序中常见的列表场景有新闻列表、购物车列表、各类排行榜等。随着信息数据的累积,特别是一些新闻应用、......
  • NCNN 源码(1)-模型加载-数据预处理-模型推理
    参考ncnn第一个版本的代码。0整体流程demo:squeezenetncnn自带的一个经典demo:squeezenet的代码://网络加载ncnn::Netsqueezenet;squeezenet.load_param("squeezenet_v1.1.param");squeezenet.load_model("squeezenet_v1.1.bin");//数据预处理ncnn::Matin......
  • 虚幻引擎游戏保存/加载存档功能
    函数名功能DoesSaveGameExist检查存档是否存在LoadGamefromSlot加载存档SaveGametoSlot保存存档DeleteGameinSlot删除存档SlotName是插槽名字存档都是通过插槽名字来读取/加载/检查/删除的先创建一个SaveGame类,这个类里可以存放要保存的数据,比如玩......
  • 学习如何:useEFFECT 和 useSTATE,一个 REACT 应用程序
    我一直在开发一个名为“Heat”的网络应用程序,该应用程序的唯一目的是帮助我学习和应用JavaScript并改进我的CSS,还有很多后端。我们的计划是创建一个具有视觉吸引力的网络应用程序,并具有一些有趣的功能。在这个过程中我学到了什么:前端是使用reactjs构建的,我选择react只是出于好......