动态路由在使用 Next.js 刷新页面时不起作用

Posted

技术标签:

【中文标题】动态路由在使用 Next.js 刷新页面时不起作用【英文标题】:Dynamic route not working on page refresh with Next.js 【发布时间】:2021-06-23 07:40:25 【问题描述】:

我使用的是 Next.js,但动态路由出错。

在我的应用程序中,我使用getStaticPathsgetStaticProps 和这个:

<Link
    href=`/offers/[id]?id=$offer.id`
    as=`/offers/$offer.id`
>
    <a>offer.title</a>
</Link>

当我点击这个链接时,动态路由显示我的页面没有问题。

但是当我刷新同一页面时,我会收到以下消息:

当我寻找解决方案时,答案是我的Link 在点击时没有正确的设置。

但现在我不点击链接,我只是刷新我的页面。

我使用 Next.js 10.0.7

【问题讨论】:

【参考方案1】:

由于 Next.js 9.5.3 不再需要使用 as 进行动态路由。相反,您可以直接使用该值在href 中进行插值。

<Link href=`/offers/$offer.id`>
    <a>offer.title</a>
</Link>

或者,您还可以通过将 URL 对象传递给它来使用不同的 Link 语法。

<Link
    href=
        pathname: '/offers/[id]',
        query:  id: offer.id 
    
>
    <a>offer.title</a>
</Link>

【讨论】:

您好,谢谢您的回答,但我还是有同样的问题。我的链接工作正常,问题来自每次刷新页面时重新加载页面都会给我这个错误。 即使按照我的建议进行更改,您仍然会遇到同样的错误? 你好,是的,但我尝试了一些更改,看看它是否来自我的代码,如果我找到解决方案或我的问题的答案,我可以发布它。 @jeanA 你的链接还能用吗?我的,链接或页面刷新都不起作用。抛出相同的错误。有什么想法吗?【参考方案2】:

我遇到了类似的问题。但我一直在网站上进行翻译。

因此,当我在任何页面上更改所选语言时,它都可以正常工作,但是一旦我在任何 [id] 页面(项目、文章等)上更改语言,我就会遇到与您相同的错误。

就我而言,问题出在我使用过的router.push() 方法中。 因此,当我通过 router.pathname 时,它会从字面上返回 /articles/[id]

但实际上我需要使用返回正确 URL 路径的router.asPath,例如/articles/abc123-456zczxc-7890-blablabla

这是来自 NextJS 文档的示例:

pathname: String - 当前路线。即/pages中的页面路径,不包括配置的basePath或locale。

asPath:String - 浏览器中显示的路径(包括查询),未配置 basePath 或语言环境。

NextJS API Reference Link

【讨论】:

非常感谢!在过去的两天里,我一直在为此苦苦挣扎。 :) 太棒了!很高兴它有帮助。

以上是关于动态路由在使用 Next.js 刷新页面时不起作用的主要内容,如果未能解决你的问题,请参考以下文章

在 AWS Amplify 控制台上部署为 SPA 后,Nuxtjs 动态路由在页面重新加载时不起作用

Next.js-express 动态路由导致页面重新加载

Next.js - 带有动态路由的浅路由

Nuxt.js 自定义角色中间件在页面刷新时不起作用

useEffect 中的套接字连接事件在创建组件时不起作用,但在 React 中刷新页面后起作用

301 重定向仅在刷新或新窗口上单击时不起作用