React:Router-3.路由懒加载

news2024/11/16 18:06:08

在 React:Router-1.BrowserRouter组件式 和 React:Router-2. createBrowserRouter函数式 两篇文章中我们已经完成了路由的创建。但是这种方式,会全量加载路由资源,如果项目较复杂,会产生性能问题。

为了优化项目性能,引出了今天的话题:路由懒加载

顾名思义:只有打开某个路由,才会加载对应资源

一、懒加载改造

我们在 React:Router-2. createBrowserRouter函数式 项目基础上进行改造:

1. lazy方法 声明懒加载的组件
// router.js
import { Suspense, lazy } from 'react';

const Home = lazy(() => import("./views/Home/Home"));
const About = lazy(() => import("./views/About/About"));
const Login = lazy(() => import("./views/Login/Login"));
const Layout = lazy(() => import("./views/Layout/Layout"));
const Info = lazy(() => import("./views/Info/Info"));
...

新建 views/Home/Home.js 文件

// 1.导入 useNavigate 函数
import {useNavigate} from 'react-router-dom';

function Home() {
    const navigate = useNavigate();

    // 2.跳转到 Login 组件
    const goLogin = () => {
      navigate('/Login?id=1001&name=李白');
    }

    return (
        <div>首页
            <button onClick={goLogin}>登录</button>
        </div>
    )
}

export default Home;

2. Suspense管理加载状态

<Suspense > 允许在子组件完成加载前展示后备方案。

fallback 中的内容是 路由加载时 展示的状态,可以是 文案或者组件。

// router.js
...
const router = createBrowserRouter([
    {
        path: '/',
        element: <Suspense fallback={"加载中~"}><Layout /></Suspense>,
        children: [
            {
                path: '/login',
                element: <Suspense fallback={"加载中~"}><Login /></Suspense>
            },
            {
                path: '/info',
                element: <Suspense fallback={"加载中~"}><Info/></Suspense>
            },
        ]
    },
    {
        path: '/home',
        element: <Suspense fallback={"加载中~"}><Home /></Suspense>
    }
])
...

二、懒加载前后对比

1. 未做懒加载前

运行项目,切换到 /home路由,通过控制台,可以看到,此时加载了一个名为bundle.js 的资源:
在这里插入图片描述
当我们 点击登录按钮 跳转到 /login 路由时,并未加载其他资源,说明:这个 bundle.js 是全量资源
在这里插入图片描述

2. 懒加载改造后

通过控制台,可以看到,此时加载了 bundle.jssrc_views_Home_Home_jsx.chunk.js 2个 资源:
在这里插入图片描述
当我们 点击登录按钮 跳转到 /login 路由时,控制台中可以看到,又新增了 src_views_Layout_Layout_jsx.chunk.jssrc_views_Login_Login_jsx.chunk.js 2个资源,正是 login 二级子路由 对应的文件。
在这里插入图片描述

⚠️注意:完整项目中,应该可以看到 懒加载前后,各js资源的大小变化,这里因为只是简单的demo,所有资源大小变化差异不大,大家可以自己尝试。

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

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

相关文章

螺栓扭矩设计多大?原来如此简单!——SunTorque智能扭矩系统

智能扭矩系统-智能拧紧系统-扭矩自动控制系统-SunTorque 螺栓扭矩设计&#xff0c;看似复杂&#xff0c;实则遵循一定的科学原理和实践经验。本文将深入浅出地探讨螺栓扭矩设计的原理和方法&#xff0c;帮助读者轻松掌握这一技能。 首先&#xff0c;我们需要了解螺栓扭矩的基…

Simulink从0搭建模型04-练习_一阶低通滤波器的实现

Simulink从0搭建模型04-练习_一阶低通滤波器的实现 1. 前言1.1. 参考1.2. 好习惯&#xff08;初始设置&#xff09; 2. 一阶低通滤波的实现2.1. 根据公式在Simulink中搭模型2.1.1. 一阶低通滤波公式2.1.2. 搭建一阶低通滤波 2.2. 把模型装进子系统的2种方式2.2.1. 方式12.2.2. …

【联通支付注册/登录安全分析报告】

联通支付注册/登录安全分析报告 前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨…

26、Qt使用QFontDatabase类加载ttf文件更改图标颜色

一、图标下载 iconfont-阿里巴巴矢量图标库 点击上面的链接&#xff0c;在打开的网页中搜索自己要使用的图标&#xff0c;如&#xff1a;最大化 找到一个自己想用图标&#xff0c;选择“添加入库” 点击“购物车”图标 能看到刚才添加的图标&#xff0c;点击“下载代码”(需要…

安全工程师基础模拟试题

安全工程师基础模拟试题作为一名安全工程师&#xff0c;掌握基本的安全知识和技能是必不可少的。下面是一些基础模拟试题&#xff0c;帮助您检验自己的安全工程师能力。1.在网络安全中&#xff0c;什么是… 1安全工程师基础模拟试题 作为一名安全工程师&#xff0c;掌握基本的…

【机器学习300问】85、Adam梯度下降优化算法的原理是什么?

Adam优化算法取了两个算法名称的首字母——Adaptive Moment Estimation的缩写&#xff0c;结合了Momentum算法和RMSprop算法的优点。在Momentum中&#xff0c;会计算前一时刻的梯度&#xff0c;并将其用于当前时刻的梯度更新&#xff1b;而RMSprop会对梯度的大小进行自适应调整…

PyCharm2024安装教程

PyCharm是一款功能强大的Python集成开发环境&#xff08;IDE&#xff09;&#xff0c;它提供了许多工具和功能来帮助开发者编写、调试和测试Python代码。以下是使用PyCharm的基本步骤&#xff1a; 安装PyCharm&#xff1a;首先&#xff0c;你需要从JetBrains官方网站下载并安装…

服务器直连电脑(盒子直连电脑)电脑需要设置为固定ip才能访问盒子

文章目录 现象盒子设置为固定ip&#xff0c;pc设置成固定ip&#xff08;以太网网卡&#xff0c;realtak那个&#xff0c;不是tap-windows那个&#xff0c;tap-windows不用管&#xff09;&#xff0c;在pc上用ip搜索工具搜索&#xff0c;可以搜到盒子ip。盒子设置为固定ip&#…

基于D1开发板和腾讯云nginx服务器构建家庭视频监控方案

腾讯云服务器使用nginx搭建rtmp服务器 什么是nginx&#xff1f; nginx是一款优秀的反向代理工具&#xff0c;通过nginx可以实现搭建高可用的轻量级web服务器&#xff0c;除此之外&#xff0c;通过Nginx自带的rtmp模块&#xff0c;也可以实现rtmp服务器的搭建。 安装nginx 安装编…

常见排序算法——希尔排序

基本原理 希尔排序在插入排序的基础之上&#xff0c;将待排序序列分成组&#xff0c;分成 gap 个组&#xff0c;组的数量通过 length / 2 获得&#xff0c;比如6个元素的序列&#xff0c;那么就是 3 个组&#xff0c;每个组两个元素&#xff0c;然后将每个组的元素进行插入排…

Ardupilot Rpanion iperf网络性能测试

Ardupilot Rpanion iperf网络性能测试 1. 源由2. 分析3. 安装4. 测试4.1 第一次测试4.1.1 iperf测试参数A4.1.1.1 测试链路14.1.1.2 测试链路24.1.1.3 测试链路3 4.1.2 iperf测试参数B - 测试链路34.1.2.1 测试数据4.1.2.2 数据简单分析4.1.2.3 数据深入分析4.1.2.4 模拟测试网…

霍金《时间简史 A Brief History of Time》书后索引(E--H)

A–D部分见&#xff1a;霍金《时间简史 A Brief History of Time》书后索引&#xff08;A–D&#xff09; 图源&#xff1a;Wikipedia INDEX E Earth: circumference, motion, shape Eclipses Eddington, Arthur Einstein, Albert: biography, see also Relativity; Special…

解决数据丢失烦恼,Tenorshare 4DDiG 数据恢复工具助您一键找回珍贵文件

在数字化时代&#xff0c;我们的生活和工作几乎完全依赖于电脑和移动设备。然而&#xff0c;意外情况时常发生&#xff0c;误删除、格式化、系统崩溃等问题可能会导致重要数据丢失&#xff0c;给我们带来不便和困扰。如何有效地解决数据丢失问题&#xff1f;不用担心&#xff0…

QT---day5,通信

1、思维导图 2、TCp 服务器 #ifndef MYWIDGET_H #define MYWIDGET_H #include <QWidget> #include <QTcpServer> #include <QList> #include <QTcpSocket> #include <QMessageBox> #include <QDebug> #include <QTcpServer> QT_B…

如何更好地使用Kafka? - 故障时解决

要确保Kafka在使用过程中的稳定性&#xff0c;需要从kafka在业务中的使用周期进行依次保障。主要可以分为&#xff1a;事先预防&#xff08;通过规范的使用、开发&#xff0c;预防问题产生&#xff09;、运行时监控&#xff08;保障集群稳定&#xff0c;出问题能及时发现&#…

大文件传输的好帮手Libarchive:功能强大的开源归档文件处理库

在数字化时代&#xff0c;文件的存储和传输对于企业的日常运作至关重要。但是&#xff0c;服务器中的压缩文件往往无法直接查看或预览&#xff0c;这给用户带来了不便。为了解决这一问题&#xff0c;在线解压功能的开发变得尤为重要。接下来&#xff0c;小编将介绍一个能够实现…

【Web后端】Tomcat简介_安装_解决乱码_idea配置

1.1 简介 tomcat是在oracle公司的ISWDK(lavaServer Web DelevopmentKit)的基础上发展起来的一个优秀的开源的servlet容器tomcat使用java语言编写。运行稳定、可靠、效率高&#xff0c;可以和目前 主流web服务器一起工作(如IIS、Apache、 Nginx)tomcat是Apache软件基金会(Apach…

初识指针(4)<C语言>

前言 前面的文章&#xff0c;已经对指针的基础概念以及运用有了初步了解&#xff0c;我们可以进一步探究指针比较深入的知识&#xff0c;下文将主要介绍&#xff1a;使用指针数组模拟二维数组、字符指针变量、数组指针、二维数组传参的本质、函数指针、typedef关键字等。 目录…

计算机网络课设---校园组网

需要word与.pkt文件的添加微信,备注"计网课设",搜索:_Z-Nuyoah 一、设计的目的和任务 通过课程设计,使学生理论联系实际,在实践中进一步了解计算机网络体系结构,深入理解TCP/IP参考模型,掌握各种网络工程技术和网络规划与设计,初步掌握高速局域网技术、广域…

成为计算机视觉(CV)需要掌握哪些技术知识(综述)

在CV领域&#xff0c;深度学习和机器学习技术发挥着至关重要的作用&#xff0c;它们为图像识别、目标检测、图像分割等任务提供了强大的工具和方法。本文将综述CV中需要学习的深度学习和机器学习技术。 一、深度学习技术 卷积神经网络&#xff08;Convolutional Neural Netwo…