如何在URL开头的盖茨比中建立动态路由

时间:2020-07-06 03:41:22

标签: gatsby

我可以从URL的开头在GatsbyJs上进行动态路由吗?我发现一些示例始终是static /:dynamic,我可以这样写吗:

<Route path: "/:category/read/:slug_post"/>

哪个“类别”将始终更改。

目前,我在gatsby-node.js上使用了这样的自定义路由。碱基是“读取”的,并且是静态的。

exports.onCreatePage = async ({ page, actions }) => {
  const { createPage } = actions
  if (page.path.match(/^\/read/)) {
    page.matchPath = "/read/*"
    createPage(page)
  }
}

现在我不使用GraphQL,在“页面”文件夹中创建一个名为“ read.js”的文件,其中包含如下代码:

import { Router as MyRouter } from "@reach/router"

<MyRouter>
  <Read path="/read/:category_slug/:post_id/:post_slug" />
</MyRouter>

在这里,我宁愿不遵循似乎的最佳做法。

1 个答案:

答案 0 :(得分:0)

也许我不了解您要执行的操作,但是在我看来,您不需要动态路由。如果您只是根据所需的模式(例如/read/<category_slug>/<id>/<post_slug>)来创建每个页面的最终URL,则应该全部设置好了,而无需定义路由器。

请参见Gatsby blog starter;其中,页面是用path: post.node.fields.slug创建的,但是没有什么阻止您创建更复杂的路径的。