reactjs - Gatsby - 在每个子目录中创建 index.js
问题描述
我的 Gatsby 网站从 YAML 文件而不是 Markdown 中获取其内容。有一堆类别和子类别,有效路径如下:
mysite.com/movies/drama/war/1980s
mysite.com/video-games/puzzles
etc...
我想index.js
为每个子目录创建一个:/movies、/movies/drama、/movies/drama/war、/video-games 等。
我的策略是获取所有页面的列表,我可以从中提取所有唯一路径和createPage
每个页面中的 index.js。但是我尝试查询
{
allSitePage {
nodes {
path
}
}
}
在 gatsby-node 期间,createPages
但尚未创建任何路径 - 只有根路径和 404 路径存在(可能是因为这些是我的 /pages 目录中的唯一文件?)
我猜无论如何都有更好的方法来做到这一点。如何在每个子目录中创建 index.js?谢谢你。
编辑:我意识到createPage
这是一个异步函数,我的查询在createPage
s 完成之前运行。我使用 async/await 调整了所有代码,以确保在运行查询之前创建了页面allSitePage
——但它仍然是空的。现在真的很迷茫。(另一个注意事项:在 GraphiQL 浏览器中,查询当然会显示所有页面。它们似乎直到gatsby-node.js
完成后才可用)
第二次编辑:我被要求发布我的 createPage() 代码:
const postsYaml = resultYaml.data.allYaml.edges
// 1-1 mapping between YAML edge and Gatsby page
// use Promise.all() to ensure all pages are created before continuing
await Promise.all(postsYaml.map(async (post, index) => {
const previous = index === postsYaml.length - 1 ? null : postsYaml[index + 1].node
const next = index === 0 ? null : postsYaml[index - 1].node
createPage({
path: post.node.fields.slug,
component: blog-page,
context: {
slug: post.node.fields.slug,
previous,
next
},
})
}))
所以这段代码运行,创建页面,然后我执行我最初发布的 GraphQL——页面不存在。
解决方案
推荐阅读
- angular - 根据多个选定的单选按钮计算总价 - Angular 9/10
- data-manipulation - 根据ID随机删除和添加行
- python - 单独工作或与所有其他参数一起工作的可选标志(如 -h)
- ios - iOS 在 Apple Silicon 上运行 - 打开文件的邮件未放置在“文档/收件箱”中
- python - 如何从单独的 DataFrame 中的匹配行值中提取列标题并基于它创建一个新列?
- java - System.in.read() 如何将字符转换为int
- sql - DateAdd 在计算查询字段中不起作用
- python - 在python中获取列表和嵌套列表之间的公共列表元素
- python - Python字符串字节到字节
- javascript - 为什么 React-Router 不显示链接?