【问题标题】:Nextjs <Link> prefetch returns 404Nextjs <Link> 预取返回 404
【发布时间】:2021-06-16 20:52:29
【问题描述】:

我已经构建了一个使用动态路由的 Next.js 应用程序,我注意到 &lt;Link&gt; 预取的一些奇怪行为。

有时(通常是在重建之后,但并非总是如此)我的应用开始为给定页面上的所有预取返回 404。如果我点击一个链接,下一页会加载,但同样,该页面上的所有预取都从 404 开始。刷新页面几次后这个问题就会消失,但这并不总是一致的。

中断似乎只发生在我的动态路线上,每秒使用 getStaticProps 和内容重新验证。下面是我如何构建链接的示例,注意tripname 将是一个动态值。

<Link href={`/trip/${tripname)}`}>
    <a>
        <Card className={classes.tripCardRoot} />
    </a>
</Link>

这是页面加载时发生的情况。

编辑:

我花了一天时间对此进行深入研究,并提供了一些额外的细节来更好地描述我的经历。此错误肯定与我构建应用程序的时间有关,并且仅发生在通过我的getStaticPaths() 函数中的fallback:true 属性在构建过程之后生成的页面上。

显式构建的页面(例如在路径数组中)似乎没有表现出这个问题。我不确定这是否有意义,但似乎给定页面的前几次加载恢复到以前版本的版本而不是后备页面。只有在重新加载页面几次后,回退功能才会真正启动,然后将该页面构建为当前构建的一部分。从那时起,一切似乎都按预期工作,直到下一个版本开始,整个考验才重新开始。

还包括控制台日志的屏幕截图,表明/_next/data/... 目录中存在问题。虽然我不确定这个错误实际上是指什么。

【问题讨论】:

  • 你用的是哪个nextjs版本?
  • 当前运行“^10.2.3”
  • 哦,抱歉,我以为您使用的是旧版本,您需要将其添加到道具 /article/${id}}>跨度>
  • 我在几个地方遇到过这个解决方案,但不幸的是,它似乎并不是我想要的,尽管它确实促使我进一步挖掘。我添加了一个编辑来为问题添加一些额外的上下文。

标签: reactjs next.js next-link


【解决方案1】:

我遇到了完全相同的问题...经过 2 天的反复试验,我终于找到了解决方案。但这不是 IMO 的最佳解决方案。

我从next/link 更新了我所有的&lt;Link /&gt; 组件并禁用了prefetch 选项。进行此更改后,我的开发工具网络选项卡中不再出现任何 404 错误。预先生成的 JSON 数据的所有 GET 请求现在只会在悬停时发生,而且神奇的是它们现在不会导致 404...

我知道这不是最好的解决方案,但至少问题已经消失了......希望有人会以更好的解决方案回复!

【讨论】:

  • 据报道,这已在 nextjs 的最新金丝雀版本 - v11.1.3-canary.14 中得到修复 - 但下一个稳定版本要等几周:github.com/vercel/next.js/issues/27783。我自己还没有尝试过,但同时考虑禁用预取,因为我不想将金丝雀 nextjs 依赖项发送到产品中。
猜你喜欢
  • 2021-12-24
  • 2020-05-12
  • 2020-03-15
  • 1970-01-01
  • 2022-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-02
相关资源
最近更新 更多