乐闻世界logo
搜索文章和话题

为什么 nextjs 中 GetInitialProps 没有被调用?

4 个月前提问
3 个月前修改
浏览次数32

1个答案

1

在 Next.js 中,getInitialProps 不被调用的原因可能有几个,以下是一些常见的情况:

  1. 页面或组件不是默认导出: Next.js 要求使用 getInitialProps 的页面或组件必须是一个默认导出。如果你通过命名导出的方式导出了组件,getInitialProps 将不会被执行。例如:

    jsx
    // 错误的导出方式 export const MyPage = () => { return <div>Hello</div>; } MyPage.getInitialProps = async () => ({ props: { data: "Some data" }, }); // 正确的导出方式 const MyPage = () => { return <div>Hello</div>; } MyPage.getInitialProps = async () => ({ props: { data: "Some data" }, }); export default MyPage;
  2. 在使用新的数据获取方法(如 getStaticPropsgetServerSideProps: 从 Next.js 9.3 版本开始,引入了 getStaticPropsgetServerSideProps 作为获取数据的新方法。如果你的页面中使用了这些新方法,getInitialProps 将不会被调用。Next.js鼓励使用新的数据获取方法,因为它们提供了更好的性能和更多的灵活性。

  3. 在自定义 _app.js 文件中未正确传递 getInitialProps: 如果你在 _app.js 文件中自定义了应用级别的功能,并且希望页面级别的 getInitialProps 正常工作,你需要确保在 _app.js 中正确地调用和传递 getInitialProps。例如:

    jsx
    // _app.js import App from 'next/app'; function MyApp({ Component, pageProps }) { return <Component {...pageProps} /> } MyApp.getInitialProps = async (appContext) => { // 调用页面的 getInitialProps const appProps = await App.getInitialProps(appContext); return { ...appProps } } export default MyApp;
  4. 页面被静态优化: 如果你的页面是静态的(不依赖于服务器端数据),Next.js 可能会自动将其优化为静态页面。这种情况下,getInitialProps 将不会被调用,因为没有必要在服务器端获取初始属性。

  5. 代码错误或其他问题: 如果以上条件都不满足,可能是因为代码中存在其他错误,导致 getInitialProps 没有正常执行。检查代码是否有语法错误、运行时错误,或者其他可能阻止 getInitialProps 正常运行的问题。

了解这些情况可以帮助你诊断为什么在你的 Next.js 应用中 getInitialProps 没有被调用,并根据情况调整代码或迁移到新的数据获取方法。

2024年6月29日 12:07 回复

你的答案