- ReactJS 教程
- ReactJS - 首頁
- ReactJS - 簡介
- ReactJS - 路線圖
- ReactJS - 安裝
- ReactJS - 特性
- ReactJS - 優點與缺點
- ReactJS - 架構
- ReactJS - 建立 React 應用
- ReactJS - JSX
- ReactJS - 元件
- ReactJS - 巢狀元件
- ReactJS - 使用新建立的元件
- ReactJS - 元件集合
- ReactJS - 樣式
- ReactJS - 屬性 (props)
- ReactJS - 使用屬性建立元件
- ReactJS - props 校驗
- ReactJS - 建構函式
- ReactJS - 元件生命週期
- ReactJS - 事件管理
- ReactJS - 建立一個事件感知元件
- ReactJS - 在 Expense Manager 應用中引入事件
- ReactJS - 狀態管理
- ReactJS - 狀態管理 API
- ReactJS - 無狀態元件
- ReactJS - 使用 React Hooks 進行狀態管理
- ReactJS - 使用 React Hooks 進行元件生命週期管理
- ReactJS - 佈局元件
- ReactJS - 分頁
- ReactJS - Material UI
- ReactJS - Http 客戶端程式設計
- ReactJS - 表單程式設計
- ReactJS - 受控元件
- ReactJS - 非受控元件
- ReactJS - Formik
- ReactJS - 條件渲染
- ReactJS - 列表
- ReactJS - Keys
- ReactJS - 路由
- ReactJS - Redux
- ReactJS - 動畫
- ReactJS - Bootstrap
- ReactJS - Map
- ReactJS - 表格
- ReactJS - 使用 Flux 管理狀態
- ReactJS - 測試
- ReactJS - CLI 命令
- ReactJS - 構建和部署
- ReactJS - 示例
- Hooks
- ReactJS - Hooks 簡介
- ReactJS - 使用 useState
- ReactJS - 使用 useEffect
- ReactJS - 使用 useContext
- ReactJS - 使用 useRef
- ReactJS - 使用 useReducer
- ReactJS - 使用 useCallback
- ReactJS - 使用 useMemo
- ReactJS - 自定義 Hooks
- ReactJS 高階
- ReactJS - 可訪問性
- ReactJS - 程式碼分割
- ReactJS - Context
- ReactJS - 錯誤邊界
- ReactJS - 轉發 Refs
- ReactJS - Fragments
- ReactJS - 高階元件
- ReactJS - 與其他庫整合
- ReactJS - 效能最佳化
- ReactJS - Profiler API
- ReactJS - Portals
- ReactJS - 無 ES6 ECMAScript 的 React
- ReactJS - 無 JSX 的 React
- ReactJS - 調和
- ReactJS - Refs 和 DOM
- ReactJS - Render Props
- ReactJS - 靜態型別檢查
- ReactJS - Strict Mode
- ReactJS - Web Components
- 附加概念
- ReactJS - 日期選擇器
- ReactJS - Helmet
- ReactJS - 內聯樣式
- ReactJS - PropTypes
- ReactJS - BrowserRouter
- ReactJS - DOM
- ReactJS - 走馬燈
- ReactJS - 圖示
- ReactJS - 表單元件
- ReactJS - 參考 API
- ReactJS 有用資源
- ReactJS - 快速指南
- ReactJS - 有用資源
- ReactJS - 討論
ReactJS - lazy()
延遲載入是 React 中的一種方法,允許我們延遲載入元件的程式碼,直到需要它為止。延遲載入允許我們僅在準備好使用時載入程式碼的特定部分,而不是在程式啟動時載入所有內容。
語法
import { lazy } from 'react';
const MyComponent = lazy(load)
引數
load − 它是一個返回 Promise 的函式。React 只會在我們第一次嘗試渲染元件時呼叫此函式。
返回值
lazy 函式返回一個可在我們的程式中使用的 React 元件。嘗試在程式碼仍在載入時渲染它會導致掛起,我們可以使用 <Suspense> 來顯示載入訊息。
示例
示例 1
現在我們將建立一個使用延遲載入的完整應用程式,該應用程式需要多個檔案和配置。這是一個使用延遲載入元件的 React 專案的簡單示例。因此,我們將建立兩個名為 ComponentA 和 ComponentB 的元件。然後,我們將把這些元件呼叫到名為 App 的主元件中。
ComponentA.js
import React from 'react';
const ComponentA = () => {
return <div>This is Component A</div>;
};
export default ComponentA;
ComponentB.js
import React from 'react';
const ComponentB = () => {
return <div>This is Component B</div>;
};
export default ComponentB;
App.js
import React, { lazy, Suspense } from 'react';
const ComponentA = lazy(() => import('./ComponentA'));
const ComponentB = lazy(() => import('./ComponentB'));
const App = () => {
return (
<div>
<h1>Lazy Loading App</h1>
<Suspense fallback={<div>Loading...</div>}>
<ComponentA />
<ComponentB />
</Suspense>
</div>
);
};
export default App;
輸出
在瀏覽器中,導航到 https://:3000,我們應該看到延遲載入的元件。
這是一個簡單的例子,延遲載入經常用於較大的元件或路由以提高效能。此外,對於多頁應用程式中更復雜的延遲載入,請考慮利用 React Router 等技術。
示例 2
讓我們建立一個基本的 React 應用,它使用延遲載入方法渲染動態專案列表。我們將有一個主元件 (ItemList) 和將併發載入的單個專案元件。
// src/ItemList.js
import React, { lazy, Suspense } from 'react';
import Loading from './Loading';
// Lazy load Item component
const Item = lazy(() => delayForDemo(import('./Item')));
const itemsData = [
{ id: 1, name: 'Item 1' },
{ id: 2, name: 'Item 2' },
{ id: 3, name: 'Item 3' },
];
const ItemList = () => {
return (
<div>
<h2>Item List</h2>
<Suspense fallback={<Loading />}>
{itemsData.map((item) => (
<Item key={item.id} name={item.name} />
))}
</Suspense>
</div>
);
};
export default ItemList;
// Add a fixed delay
function delayForDemo(promise) {
return new Promise(resolve => {
setTimeout(resolve, 2000);
}).then(() => promise);
}
Loading.js
export default function Loading() {
return <p><i>Loading...</i></p>;
}
src/App.js
import React from 'react';
import ItemList from './ItemList';
function App() {
return (
<div>
<h1>Lazy Loading Example</h1>
<ItemList />
</div>
);
}
export default App;
輸出
在瀏覽器中,導航到 https://:3000,我們應該看到延遲載入的專案列表。
此示例演示瞭如何使用延遲載入來提高應用程式的初始載入效能,尤其是在處理大量元件列表時。
示例 3
讓我們再建立一個示例,我們將使用 lazy 方法載入包含影像的元件。
LazyComponent.js
import React from 'react';
const LazyComponent = () => {
return (
<div>
<p>This component contains a image:</p>
<img
src="https://via.placeholder.com/300"
alt="Lazy Loaded Image"
/>
</div>
);
};
export default LazyComponent;
Loading.js
export default function Loading() {
return <p><i>Loading...</i></p>;
}
App.js
import React, { lazy, Suspense } from 'react';
import './App.css'
// Lazy load the component
const LazyComponent = lazy(() => delayForDemo(import('./LazyComponent')));
const App = () => {
return (
<div className='App'>
<h1>Lazy Loading Example</h1>
<p>This is the main component.</p>
{/* Suspense to handle the lazy loading */}
<Suspense fallback={<div>Loading...</div>}>
<LazyComponent />
</Suspense>
</div>
);
};
export default App;
// Add a fixed delay
function delayForDemo(promise) {
return new Promise(resolve => {
setTimeout(resolve, 2000);
}).then(() => promise);
}
輸出
在此示例中,LazyComponent 元件包含從源載入的影像。我們使用 lazy 方法在 App 元件中載入此元件。
和以前一樣,Suspense 元件處理延遲元件的非同步載入,並在載入元件時顯示回退 UI(在本例中為簡單的“載入中...”訊息)。
總結
React 中的延遲載入透過僅載入所需的程式碼來提高效能,使我們的應用程式更快、更高效。我們使用延遲載入方法建立了兩個簡單的應用程式。這些都是非常簡單的例子,延遲載入經常用於較大的元件或路由以提高效能。