React 中的延迟加载Lazy loading

React 中的延迟加载功能可让您将代码拆分成更小的块,仅在实际需要时加载应用程序特定部分所需的代码。这可以缩短应用程序的初始加载时间。

React 提供了一项称为动态导入的功能以及 React 的 Suspense 组件来实现延迟加载。

以下是如何使用 React.lazy() 和 Suspense 在 React 应用程序中实现路由延迟加载的示例

lazy() 用于仅在需要时动态导入组件。

Suspense 是 React 提供的一个组件,可让您"等待"动态导入加载,同时显示后备 UI(在本例中为简单的"正在加载..."消息)。

为要延迟加载的组件创建一个单独的文件

javascript 复制代码
// Products.js
import React from 'react';

const Products = () => {
  return <div>This is a lazy-loaded component!</div>;
};

export default Products;

使用 React.lazy() 在路由文件中动态导入组件

javascript 复制代码
const Prodcuts = React.lazy(() => import("./components/products/Products"));
javascript 复制代码
import React from "react";
import ReactDOM from "react-dom/client";
import "./index.css";
import App from "./App";
//  import Prodcuts from "./components/products/Products";
import PageNotFound from "./components/PagenotFound/PageNotFound";
import {
  createBrowserRouter,
  createRoutesFromElements,
  Route,
  RouterProvider,
} from "react-router-dom";
import Home from "./components/Home/Home";

const Prodcuts = React.lazy(() => import("./components/products/Products"));

const router = createBrowserRouter(
  createRoutesFromElements(
    <Route path="/" element={<App />}>
      <Route path="/" element={<Home />} 
      <Route
        path="prodcuts"
        element={
          <React.Suspense fallback={<>...</>}>
            <Prodcuts />
          </React.Suspense>
        }
      />
      <Route path="*" element={<PageNotFound />} />
    </Route>
  )
);

const root = ReactDOM.createRoot(document.getElementById("root"));

在上面的代码中,产品组件使用 React.lazy() 延迟加载。Suspense 组件用于在加载延迟加载组件时指定回退 UI。

运行您的应用程序:

当您导航到 /products 路由时,Products组件仅在需要时加载。

注意:Suspense 的 fallback prop 是必需的。它定义了在加载组件时将显示的 UI。您可以根据应用程序的设计和要求自定义此 UI。

谢谢 !!!感兴趣可以关注一下,我们一起学习

相关推荐
铁匠匠匠几秒前
django学习入门系列之第三点《案例 商品推荐部分》
前端·笔记·python·学习·django·前端框架·开源
乐吾乐科技3 分钟前
【乐吾乐2D可视化组态编辑器】文件
开发语言·前端·javascript·vue.js·编辑器·数据可视化
爱意迷了眼丶8 分钟前
vue2使用wangEditor5搭建模拟文档的编辑器快速集成
javascript·vue.js·编辑器
You can do more14 分钟前
Qt自定义类型
开发语言·qt
Sane15 分钟前
函数柯里化——小心一点炫技
前端·javascript·面试
小关@16 分钟前
NestJs 使用 RabbitMQ
前端
码到成龚24 分钟前
c++习题04-忙碌的工人
开发语言·c++
读心悦25 分钟前
【CSS】深入浅出CSS过渡
前端·css
十一岁的加重26 分钟前
无感顺滑地使用Sourcetree推送code review 到gerrit
前端
萧寂17327 分钟前
html引入别的html文件(类似于框架的组件使用,只适合静态的,不适合组件传值)
前端·html