static - 重新加载静态页面时未调用 Next.js getInitialProps() 方法
问题描述
我正在Next.js 中构建一个静态站点。当静态站点生成带有.html
扩展名的页面时,我在元素as
上使用该属性Link
,这允许重新加载我的页面。
我现在已经在我的 URL 中引入了查询字符串的使用,以便在重新加载页面时,它们可以通过使用该getInitialProps()
方法记住要显示的内容。
到目前为止,一切都很好,但仅在开发过程中。
我面临的问题是,当站点作为静态版本导出时,Next.js 无法调用该getInitialProps()
方法,因此,当刷新浏览器时,我的页面不再知道要显示什么。
任何人都可以提供以下任何帮助:
- 是否有另一种方法可以在不使用扩展程序的情况下刷新静态页面?
.html
- 有没有办法确保在导出静态站点和重新加载
getInitialProps()
页面时调用该方法? - 是否有另一种方法可以从浏览器 URL 中检索查询字符串,因为 Next.js 似乎甚至无法访问顶级
window
对象?
解决方案
getInitialProps
仅在服务器端呈现的应用程序上可用。它在开发过程中运行,因为 Next 不知道您希望您的页面是静态的还是 SSR。但是当你运行时next build && next export
,它们会变成静态并且getInitialProps
不再运行。我相信这也是为什么 next 切换到getServerSideProps
而getStaticProps
不是getInitialProps
(除了_app.js
页面之外的所有内容)
针对您的问题清单:
- Next 导出以便您不必使用/显示 HTML 扩展,但这也取决于您的托管设置。导出静态站点会导出
.html
文件,但由您的主机配置决定是否显示这些文件。 - 见上文,没有 - 无法
getInitialProps
在完全静态的导出站点上运行。如果必须使用getInitialProps
. - 您的静态站点可以检索查询字符串,但它不会在构建时拥有它。
React.useEffect
相反,当窗口对象可用时,您需要检查它(通常在 中) 。在静态站点上,这不是在构建时,而是在运行时。查看有关如何在 javascript 中获取查询字符串的答案- 您可以在useEffect
.
推荐阅读
- python - Matplotlib 不全屏保存图像
- c++ - (C++)我正在尝试从文本文件中读取和输出随机行,并且在运行它时不断收到“浮点异常(核心转储)”
- jquery - jQuery Validation 验证元素,即使设置为“required: false”
- javascript - 我将如何在 vanilla JS 中执行此 ajax jquery?
- c - C – 如何在三元运算符中使用退出/返回语句?
- c# - 创建没有时区同步的每周计划任务
- r - .subset2(x, i, exact = exact) 中的错误:R 中的下标越界
- xmltodict - xmltodict parse/unparse 产生不产生相同的 xml 文件
- java - 验证子字符串是否相等
- sql - 使用子句 IN 从 sql 转换为 jpql