Next.js 重新加载静态页面时未调用 getInitialProps() 方法

Next.js getInitialProps() method not called when reloading static page

我正在 Next.js 中构建一个 静态 站点。由于静态站点生成带有 .html 扩展名的页面,因此我在我的 Link 元素上使用 as 属性,这允许重新加载我的页面。

我现在已经在我的 URL 中引入了 查询字符串 的使用,以便在重新加载页面时,它们会记住要显示的内容,通过使用 getInitialProps() 方法。

到目前为止,还不错,但只是在开发过程中。

我面临的问题是,当站点导出为static版本时,Next.js无法调用getInitialProps()方法,因此,刷新浏览器后,我的页面不再知道要显示什么。

任何人都可以帮助解决以下任何问题:

  1. 是否有另一种方法允许静态页面刷新,使用.html扩展?
  2. 有没有办法确保在导出 static 站点和 reloading a 时调用 getInitialProps() 方法页数?
  3. 有没有其他方法可以让我从浏览器 检索查询字符串 URL,因为 Next.js 似乎没有这个能力甚至访问顶级 window 对象?

getInitialProps 仅适用于服务器端呈现的应用程序。它 运行s 在开发期间,因为 Next 不知道您是希望页面是静态的还是 SSR。但是当你 运行 next build && next export 时,它们会变成静态的并且 getInitialProps 不再是 运行。我相信这也是为什么接下来切换到 getServerSidePropsgetStaticProps 而不是 getInitialProps 的原因(除了 _app.js 页面之外的所有内容)

回应您的问题列表:

  1. 下一步导出,这样您就不必 use/show HTML 扩展,但这也取决于您的主机设置。导出静态站点会导出 .html 文件,但是否显示这些文件取决于您的主机配置。
  2. 见上文,没有 - 无法在完全静态的导出网站上使用 getInitialProps 运行。如果必须使用 getInitialProps.
  3. ,则需要切换到服务器端呈现的站点
  4. 您的静态站点可以检索查询字符串,但它不会在构建时拥有它。相反,您需要在 window 对象 可用时检查它(通常在 React.useEffect 中)。在静态站点上,这不是在构建时,而是仅在 运行 时。 Check out this answer on how to get the query string in javascript - 您可以在 useEffect.
  5. 中使用它