React:Router-3.路由懒加载

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,所有资源大小变化差异不大,大家可以自己尝试。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端卡卡西呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值