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

开发 前端
​​next/dynamic​​ 是 Next.js 提供的动态导入(Lazy Loading)功能,用于按需加载组件,从而减少首屏 JS 体积,提高性能。

next/dynamic 是 Next.js 提供的动态导入(Lazy Loading)功能,用于按需加载组件,从而减少首屏 JS 体积,提高性能。

🔥 next/dynamic 的作用

✅ 减少初始 JS 体积(代码分割,提高页面加载速度)
✅ 按需加载组件(只有在需要时才下载 JS 代码)
✅ 避免 SSR 渲染不支持的库(如 window 依赖的库)
✅ 支持自定义加载状态(可以显示 Loading 占位符)

🔥 next/dynamic 的基本用法

📌 基础用法

import dynamic from "next/dynamic";

// 组件在客户端加载(不会 SSR)
const HeavyComponent = dynamic(() => import("../components/HeavyComponent"), {
  ssr: false, // 关闭 SSR
});

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

✅ 优化点

  • HeavyComponent 不会被包含在服务器渲染的 HTML 中
  • 仅在 客户端加载,不会影响 SSR

🔥 1. 懒加载大型组件

📌 适用于图表、地图等大型组件

import dynamic from "next/dynamic";

// 组件按需加载
const Chart = dynamic(() => import("../components/Chart"), {
  loading: () => <p>Loading...</p>, // ⏳ 加载时显示占位符
});

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

✅ 优化点

  • Chart 组件不会影响首屏加载
  • 只有用户访问该页面时才会加载

🔥 2. 关闭 SSR,避免 window 相关错误

📌 某些第三方库(如 mapbox-gl)只在客户端运行

import dynamic from "next/dynamic";

// 关闭 SSR,避免 `window is not defined` 错误
const Map = dynamic(() => import("../components/Map"), { ssr: false });

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

✅ 优化点

  • 避免 window is not defined 错误
  • 适用于仅在客户端运行的库

🔥 3. 仅在事件触发时加载

📌 避免不必要的加载

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>
  );
}

✅ 优化点

  • 只有用户点击按钮时才加载 HeavyComponent
  • 减少初始加载时间

🔥 4. dynamic() 配合 import() 进行代码拆分

📌 按需加载模块

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

✅ 优化点

  • 仅在需要时加载模块
  • 避免影响主 JS 体积

🎯 总结

用法

适用场景

优化点

默认动态导入

组件懒加载

✅ 只在需要时加载

SSR 关闭

 (ssr: false)

依赖 window 的库

✅ 避免 window is not defined 错误

自定义加载状态

显示 Loading UI

✅ 提升用户体验

事件触发加载

用户交互后才加载

✅ 减少不必要的 JS

📌 一句话总结👉 next/dynamic 让 Next.js 组件支持懒加载,减少 JS 体积,优化页面性能! 

责任编辑:武晓燕 来源: 大迁世界
相关推荐

2025-01-26 07:10:00

Web 应用Next.js代码分割

2021-07-06 07:27:45

React元素属性

2024-11-25 07:39:48

2025-02-05 07:00:00

Next.jsWeb前端

2024-12-13 08:37:32

2025-02-03 00:00:35

2024-05-09 09:01:03

2024-09-20 15:37:02

2024-09-04 10:27:53

2024-04-28 10:56:34

Next.jsWeb应用搜索引擎优化

2023-09-04 08:20:00

2024-07-19 10:03:29

2025-01-17 09:29:42

2024-02-05 11:55:41

Next.js开发URL

2024-03-05 19:17:37

2024-12-20 07:30:00

重定向服务器端指令Next.js

2021-11-26 10:29:24

jsRemix开源

2024-03-04 07:33:39

RemixReact框架

2024-11-15 08:12:48

Next.js内容管理系统Sanity

2023-09-20 10:14:03

Next.js前端
点赞
收藏

51CTO技术栈公众号