Yasin

Yasin

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 里用到了 localStoragewindow 等浏览器 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 集成 一般 完整支持