我可以从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>
在这里,我宁愿不遵循似乎的最佳做法。
答案 0 :(得分:0)
也许我不了解您要执行的操作,但是在我看来,您不需要动态路由。如果您只是根据所需的模式(例如/read/<category_slug>/<id>/<post_slug>
)来创建每个页面的最终URL,则应该全部设置好了,而无需定义路由器。
请参见Gatsby blog starter;其中,页面是用path: post.node.fields.slug
创建的,但是没有什么阻止您创建更复杂的路径的。