2

我使用的是 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

4

2 回答 2

3

我有一个类似的问题。但我一直在网站上进行翻译。

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

就我而言,问题出在router.push()我使用的方法内部。所以当我通过router.pathname它时,它会按字面意思返回/articles/[id]

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

这是 NextJS 文档中的一个示例:

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

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

NextJS API 参考链接

于 2021-10-19T14:55:38.053 回答
3

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

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

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

<Link
    href={{
        pathname: '/offers/[id]',
        query: { id: offer.id }
    }}
>
    <a>{offer.title}</a>
</Link>
于 2021-03-26T17:52:45.000 回答