[react] React 使用 Lazy 與 Suspense 動態載入 Component
當我們使用 React 開發網站時,一進入到網站,React 就會將我們所有用到的 Component 給載入進來。
舉例來說,我們現在有三個 Component,分別是:Home
、Items
、About
。
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;
在 Network 的部分也可以看到這三個 Component 被載入。
Lazy & Suspense
如果我們網站 Component 非常多,有些 Component 可能使用者不會常去使用到,但使用者進到網站時一樣會載入該 Component,這時候就可以使用 lazy
和 suspense
來達到動態載入 Component 的功能,也就是在必要的時候才去讀取該 Component。
這邊將 Items
與 About
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 並沒有載入。
當我們進到 Items 和 About 頁面時,才會將這兩個 Component 載入。