跳至主要内容

[react] React 使用 Lazy 與 Suspense 動態載入 Component

影片連結

當我們使用 React 開發網站時,一進入到網站,React 就會將我們所有用到的 Component 給載入進來。

舉例來說,我們現在有三個 Component,分別是:HomeItemsAbout

App.jsx
import { BrowserRouter as Router, Route, Routes } from "react-router-dom";import "./App.css";import Navbar from "./component/Navbar";import Home from "./component/Home";import Items from "./component/Items";import About from "./component/About";function App() {  return (    <div className="App">      <Router>        <Navbar />        <Routes>          <Route path="/" element={<Home />} />          <Route path="/items" element={<Items />} />          <Route path="/about" element={<About />} />        </Routes>      </Router>    </div>  );}export default App;

Image

在 Network 的部分也可以看到這三個 Component 被載入。

Image

Lazy & Suspense

如果我們網站 Component 非常多,有些 Component 可能使用者不會常去使用到,但使用者進到網站時一樣會載入該 Component,這時候就可以使用 lazysuspense 來達到動態載入 Component 的功能,也就是在必要的時候才去讀取該 Component。

這邊將 ItemsAbout Component 使用 lazy 動態載入的方式做處理。

App.jsx
import { BrowserRouter as Router, Route, Routes } from "react-router-dom";import "./App.css";import Navbar from "./component/Navbar";import Home from "./component/Home";import { lazy, Suspense } from "react";const Items = lazy(() => import("./component/Items"));const About = lazy(() => import("./component/About"));function App() {  return (    <div className="App">      <Router>        <Navbar />        <Suspense fallback={<h1>Loading...</h1>}>          <Routes>            <Route path="/" element={<Home />} />            <Route path="/items" element={<Items />} />            <Route path="/about" element={<About />} />          </Routes>        </Suspense>      </Router>    </div>  );}export default App;

這時候可以發現,一開始載入時,Items 和 About 並沒有載入。

Images

當我們進到 Items 和 About 頁面時,才會將這兩個 Component 載入。

Images