错误:app/ 目录不支持 getInitialProps。请改用 generateMetadata、generateStaticParams 或服务器组件。
Error: getInitialProps is not supported in the app/ directory. Use generateMetadata, generateStaticParams, or server components instead.
ID: nextjs/app-dir-getinitialprops-legacy
版本兼容性
| 版本 | 状态 | 引入 | 弃用 | 备注 |
|---|---|---|---|---|
| Next.js 13.x | active | — | — | — |
| Next.js 14.x | active | — | — | — |
| Next.js 15.x | active | — | — | — |
根因分析
app/ 目录使用新的路由模型,不支持 getInitialProps,这是 Pages Router 的旧功能。从 pages/ 迁移到 app/ 的开发人员错误地使用了 getInitialProps。
English
The app/ directory uses a new routing model that does not support getInitialProps, which was a legacy Pages Router feature. Developers migrating from pages/ to app/ mistakenly use getInitialProps.
官方文档
https://nextjs.org/docs/app/building-your-application/upgrading/app-router-migration#step-3-migrating-getinitialprops解决方案
-
Replace getInitialProps with server component data fetching: directly fetch data in the component body using async/await. For dynamic metadata, use generateMetadata.
-
If the data is needed on every page, use a root layout with a server component that fetches data and passes it via context or props.
无效尝试
常见但无效的做法:
-
90% 失败
The app router explicitly disallows getInitialProps; it will throw this error at build or runtime.
-
70% 失败
Even if the component is imported, its getInitialProps will not run; the app router ignores it entirely.
-
60% 失败
getServerSideProps is also not supported in app/; it must be replaced with server components or fetch with cache options.