Next.js 13(实验性app.dir)全页面默认SSR问题求助
Next.js 13 App Router 默认非SSG问题解决方法
Next.js 13 App Router 中,页面组件默认是 Server Components,构建时默认标记为 Server(λ)——这是框架为保留服务端渲染灵活性的默认行为,即便页面没有数据获取逻辑,也不会自动触发全静态生成(SSG)。只有动态路由配合generateStaticParams时,才会自动预渲染为静态页面。
方案1:单页面强制静态生成
在需要静态化的页面文件(如app/test/page.tsx)中添加dynamic配置,强制页面静态生成:
export const dynamic = "force-static"; const TestPage = () => { return <h1>test page</h1>; }; export default TestPage;
添加后执行npm run build,该页面会被标记为●(SSG)。
方案2:全局默认静态生成
如果希望所有页面默认都采用SSG,可以在根布局app/layout.tsx中添加全局配置,所有子页面会自动继承该设置:
export const dynamic = "force-static"; export default function RootLayout({ children, }: { children: React.ReactNode; }) { return ( <html lang="zh-CN"> <body>{children}</body> </html> ); }
如果某个页面需要动态渲染(比如依赖用户会话、实时数据),可在该页面单独导出dynamic = "auto"或"force-dynamic"覆盖全局配置。
补充说明
- App Router 已废弃
getStaticProps,静态生成逻辑通过dynamic配置 + Server Components 内直接写数据请求 +generateStaticParams(动态路由场景)组合实现。 - 当页面使用
force-static时,Next.js 会在构建阶段预渲染页面为静态HTML文件,后续请求直接返回静态资源,不再经过服务端渲染。
内容的提问来源于stack exchange,提问作者DeadBoyPiotrek
相关产品推荐
相关产品推荐

