gatsby - 如何在 URL 开头的 Gatsby 中创建动态路由
问题描述
我可以从 URL 的开头在 GatsbyJs 上创建动态路由吗?我发现的一些例子总是静态/:动态的,我可以这样:
<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,在“pages”文件夹中创建了一个名为“read.js”的文件,其中包含如下代码:
import { Router as MyRouter } from "@reach/router"
<MyRouter>
<Read path="/read/:category_slug/:post_id/:post_slug" />
</MyRouter>
在这里,我宁愿不遵循看起来的最佳实践。
解决方案
也许我不明白你想要做什么,但在我看来你不需要动态路由。如果您只是根据您需要的模式(例如/read/<category_slug>/<id>/<post_slug>
)创建具有最终 URL 的每个页面,那么您应该已经准备就绪,并且不需要定义路由器。
请参阅Gatsby 博客启动器;在其中,页面是用创建的,path: post.node.fields.slug
但没有什么能阻止你创建更复杂的路径。
推荐阅读
- jsf - Java JSF 和 Bean 连接的问题
- powershell - How to pass powershell parameters into Chef
- reactjs - componentDidMount 没有渲染所有内容
- javascript - 在 React 中测试 Paypal 按钮(茉莉和酶)
- scala - 如何从 Scala 中的特征访问类型成员
- python - 在类 (OOP) 中实现 tkinter Frame 时遇到问题 [AttributeError: type object 'Frame' has no attribute 'tk']
- c# - 方法返回 'System.Threading.Tasks.Task`1[System.Threading.Tasks.VoidTaskResult]' 而不是结果
- javascript - 我无法使用钩子更新我的状态
- python - DataFlow 3.x 默认库
- python - 如何使从地图边缘生成的对象沿对角线朝向中间?