nextjs next/dynamic是什么
next/dynamic 是 Next.js 的动态导入工具,相当于对 React.lazy 的封装并扩展了额外功能。
两个核心作用
1. 代码分割(Code Splitting)
不在初始 bundle 里加载组件,而是需要时再加载:
// 页面加载时不会打包 HeavyComponent,按需加载
const HeavyChart = dynamic(() => import("./heavy-chart"));
2. 禁用 SSR(ssr: false)
const Map = dynamic(() => import("./map"), { ssr: false });
这是你当前代码的用途——阻止 Next.js 在服务端预渲染这个组件。
为什么要 ssr: false
你的 DesktopApp 里用到了 localStorage、window 等浏览器 API,这些在 Node.js 服务端根本不存在。如果 SSR 尝试执行这些代码,就会报:
ReferenceError: localStorage is not defined
加上 ssr: false 后,服务端直接跳过渲染该组件,只在浏览器端执行,问题消除。
与 React.lazy 的区别
React.lazy |
next/dynamic |
|
|---|---|---|
| 代码分割 | ✅ | ✅ |
| 禁用 SSR | ❌ | ✅ ssr: false |
| Loading 占位 | Suspense | loading 选项 |
| Next.js 集成 | 一般 | 完整支持 |
