自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

面試官:Next.js 中的 next/dynamic 有什么作用?如何使用它

開發(fā) 前端
??next/dynamic?? 是 Next.js 提供的動(dòng)態(tài)導(dǎo)入(Lazy Loading)功能,用于按需加載組件,從而減少首屏 JS 體積,提高性能。

next/dynamic 是 Next.js 提供的動(dòng)態(tài)導(dǎo)入(Lazy Loading)功能,用于按需加載組件,從而減少首屏 JS 體積,提高性能。

?? next/dynamic 的作用

減少初始 JS 體積(代碼分割,提高頁(yè)面加載速度)
按需加載組件(只有在需要時(shí)才下載 JS 代碼)
避免 SSR 渲染不支持的庫(kù)(如 window 依賴的庫(kù))
支持自定義加載狀態(tài)(可以顯示 Loading 占位符)

?? next/dynamic 的基本用法

?? 基礎(chǔ)用法

import dynamic from "next/dynamic";

// 組件在客戶端加載(不會(huì) SSR)
const HeavyComponent = dynamic(() => import("../components/HeavyComponent"), {
  ssr: false, // 關(guān)閉 SSR
});

export default function Page() {
  return <HeavyComponent />;
}

優(yōu)化點(diǎn)

  • HeavyComponent 不會(huì)被包含在服務(wù)器渲染的 HTML 中
  • 僅在 客戶端加載,不會(huì)影響 SSR

?? 1. 懶加載大型組件

?? 適用于圖表、地圖等大型組件

import dynamic from "next/dynamic";

// 組件按需加載
const Chart = dynamic(() => import("../components/Chart"), {
  loading: () => <p>Loading...</p>, // ? 加載時(shí)顯示占位符
});

export default function Page() {
  return <Chart />;
}

優(yōu)化點(diǎn)

  • Chart 組件不會(huì)影響首屏加載
  • 只有用戶訪問(wèn)該頁(yè)面時(shí)才會(huì)加載

?? 2. 關(guān)閉 SSR,避免 window 相關(guān)錯(cuò)誤

?? 某些第三方庫(kù)(如 mapbox-gl)只在客戶端運(yùn)行

import dynamic from "next/dynamic";

// 關(guān)閉 SSR,避免 `window is not defined` 錯(cuò)誤
const Map = dynamic(() => import("../components/Map"), { ssr: false });

export default function Page() {
  return <Map />;
}

優(yōu)化點(diǎn)

  • 避免 window is not defined 錯(cuò)誤
  • 適用于僅在客戶端運(yùn)行的庫(kù)

?? 3. 僅在事件觸發(fā)時(shí)加載

?? 避免不必要的加載

import { useState } from "react";
import dynamic from "next/dynamic";

const HeavyComponent = dynamic(() => import("../components/HeavyComponent"));

export default function Page() {
  const [show, setShow] = useState(false);

  return (
    <div>
      <button onClick={() => setShow(true)}>顯示組件</button>
      {show && <HeavyComponent />}
    </div>
  );
}

優(yōu)化點(diǎn)

  • 只有用戶點(diǎn)擊按鈕時(shí)才加載 HeavyComponent
  • 減少初始加載時(shí)間

?? 4. dynamic() 配合 import() 進(jìn)行代碼拆分

?? 按需加載模塊

async function handleClick() {
  const { someFunction } = await import("../utils/heavyFunctions");
  someFunction();
}

優(yōu)化點(diǎn)

  • 僅在需要時(shí)加載模塊
  • 避免影響主 JS 體積

?? 總結(jié)

用法

適用場(chǎng)景

優(yōu)化點(diǎn)

默認(rèn)動(dòng)態(tài)導(dǎo)入

組件懶加載

? 只在需要時(shí)加載

SSR 關(guān)閉

 (ssr: false)

依賴 window 的庫(kù)

? 避免 window is not defined 錯(cuò)誤

自定義加載狀態(tài)

顯示 Loading UI

? 提升用戶體驗(yàn)

事件觸發(fā)加載

用戶交互后才加載

? 減少不必要的 JS

?? 一句話總結(jié)?? next/dynamic 讓 Next.js 組件支持懶加載,減少 JS 體積,優(yōu)化頁(yè)面性能! 

責(zé)任編輯:武曉燕 來(lái)源: 大遷世界
相關(guān)推薦

2025-03-05 00:02:00

Next.jsExpress.jAPI 路由

2025-01-26 07:10:00

Web 應(yīng)用Next.js代碼分割

2021-07-06 07:27:45

React元素屬性

2025-03-17 03:00:00

2024-12-13 08:37:32

2024-11-25 07:39:48

2025-02-05 07:00:00

Next.jsWeb前端

2025-02-03 00:00:35

2025-03-06 00:00:00

2025-03-31 00:00:00

?增量靜態(tài)再生Next.jsISR

2024-09-20 15:37:02

2024-05-09 09:01:03

2024-09-04 10:27:53

2024-04-28 10:56:34

Next.jsWeb應(yīng)用搜索引擎優(yōu)化

2023-09-04 08:20:00

2024-07-19 10:03:29

2025-01-17 09:29:42

2025-03-21 00:05:00

2025-03-19 08:06:31

2024-02-05 11:55:41

Next.js開發(fā)URL
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)