【问题标题】:How do I pass a custom parameter to nextjs dynamic route so I can access it inside getInitialProps如何将自定义参数传递给 nextjs 动态路由,以便我可以在 getInitialProps 中访问它
【发布时间】:2020-02-21 12:32:55
【问题描述】:

我想将一个 ID 作为自定义参数传递给 next/link <Link /> 并能够在 getInitialProps 中访问它。我想使用干净的 URL,但我使用的 API 只允许您通过帖子 ID 查询它。因此,虽然我可以访问 getInitialProps 中的帖子 slug,但我无法使用它来查询帖子。

我目前已将其设置为在 URL 中使用 post slug

<Link href="/article" as={`/article/${urlPattern}`}>
    <a>{title}</a>
</Link>

在 getInitialProps 中,我可以通过上下文参数访问 slug

Article.getInitialProps = async context => {
    const slug = context.query;
    // need query ID
    // do api call
};

有没有办法可以将 ID 传递给以便我可以通过上下文在 getInitialProps 中访问它来执行我的 API 调用?

** 编辑 **

我通过添加一个允许我通过 context.query.id 访问 id 的查询属性更新了包含文章 ID 的 URL 只是文章名称,但我仍然需要一种方法来访问 getInItialProps 中的文章 ID,所以我进行了 api 调用。

<Link
    href="/article/[article]"
    as={{
        pathname: `/article/${urlPattern}`,
        query: { id: system.id }
    }}
>

【问题讨论】:

  • slug 是否包含 id?
  • 不,slug 只是帖子的标题
  • 您是否尝试过像示例 github.com/zeit/next.js/blob/master/examples/… 中那样传递 url 对象?
  • 是的,问题是我无法在 getInitialProps 中访问这些对象
  • 不幸的是,如果您的服务器端没有提供通过 slug 获取帖子的方法,那么这是不可能的。最好更新服务器以支持通过 slug 获取

标签: reactjs next.js


【解决方案1】:

您可以将 URL object 传递给 as 属性:

<Link
      href={"/article"}
      as={{
        pathname: "/article",
        query: { id: "query id" }
      }}
    >
      <a>title</a>
    </Link>

有一个例子:https://github.com/zeit/next.js/tree/master/examples/with-url-object-routing

【讨论】:

  • 我无法在 getInitialProps 中访问它
  • @user3486427 你能创建一个带有演示的代码框吗?类似于codesandbox.io/s/objective-pond-xtwww
  • 这行得通,但网址最终像这样 /article/coffee-beverages-explained?id=cf106f4e-30a4-42ef-b313-b8ea3fd3e5c5 并不理想。有没有办法在不更新url的情况下传递id?
  • @user3486427 你在使用next export 来生成静态页面吗? (每篇文章一个 html)
猜你喜欢
  • 1970-01-01
  • 2020-03-25
  • 2021-12-29
  • 2011-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-24
  • 2021-10-02
相关资源
最近更新 更多