gatsby - 采购 MDX 文件以编程方式在 Gatsby 中创建投资组合页面
问题描述
我是一个新手,试图构建一个 Gatsby 站点,该站点以编程方式为/content/portfolio
使用以下 url 结构放置的 MDX 文件生成页面:sitename/portfolio/single-portfolio-item
. 该网站正在运行gatsby-starter-blog-theme
。
以下是我遵循的步骤:
创建一个新的 gatsby 站点:
gatsby new gatsby-portfolio https://github.com/gatsbyjs/gatsby-starter-blog-theme
并使用gatsby develop
.为投资组合 MDX 帖子创建目录:
content/portfolio
创建一个投资组合帖子:
content/portfolio/pf1.mdx
具有以下内容:
---
title: Portfolio item 1ˆ
date: 2019-04-15
image: ./sunset-beach.jpg
imageAlt: A beach at sunset with crashing waves.
---
Hello, world! This is a demo post for `gatsby-theme-blog`.
Delete me, and get writing!
- 编辑
gatsby-config.js
以便content/portfolio
通过在插件部分中添加以下行来处理文件:
{
resolve: `gatsby-source-filesystem`,
options: {
name: `portfolio`,
path: `${__dirname}/content/portfolio/`,
},
停止服务器并
gatsby develop
再次运行在 GraphiQL 中查找投资组合帖子
allMdx
并在那里找到它:
{
"data": {
"allMdx": {
"nodes": [
{
"slug": "hello-world/"
},
{
"slug": "my-second-post"
},
{
"slug": "pf1/"
}
]
}
},
"extensions": {}
}
但在这里我卡住了。
就像我说的,在检查 GraphiQL 时,我可以在 上看到新帖子allMdx
,但在 上看不到allMdxBlogPosts
。我不知道为什么它不存在,因此,为什么帖子没有在前端呈现。
而且我也不知道如何创建一个allPortfolioPosts
节点并在前端呈现它的帖子。
谁能帮我吗?提前致谢!
解决方案
您正在使数据可查询,但从不查询它来创建页面。一种方法是使用文件系统路由 API。
在您的 pages 目录中创建一个文件,如:{Mdx.slug}.js
. 该文件将为您拥有的每个 Mdx 节点生成一个页面(可在 localhost:8000/ 访问),并允许您访问该节点的 ID。
所以你可以做这样的事情:
import React from "react"
import { graphql } from "gatsby"
import { MDXRenderer } from "gatsby-plugin-mdx"
import Layout from "../../components/layout"
const BlogPostPage = ({data}) => {
const post = data.mdx
return (
<Layout>
<article>
<h2>{post.frontmatter.title}</h2>
<MDXRenderer>{post.body}</MDXRenderer>
</article>
</Layout>
)
}
export const query = graphql`
query BlogPostById($id: String) {
mdx(id: { eq: $id }) {
body
frontmatter {
title
}
}
}
`
export default BlogPostPage
推荐阅读
- ruby-on-rails - 来自 Github 的 gem rails 没有更新
- docker - 使用 fabric-samples 文件夹启动 Hyperledger Fabric 的测试网络时的端口冲突
- javascript - 通过点击事件监听器获取嵌套元素的属性值
- javascript - 使用正交相机时 GLTF 对象的纹理消失
- heroku - 在 Heroku 中使用 Ncat 进行代理身份验证
- xcode - SwfitUI 2.0 Xcode 12 如何更新核心数据实体的单个属性
- google-drive-api - 更新时未保留 Google doc 文件样式
- mysql - 有没有一种快速的方法来使用 MySQL 更新一个 json 列数据?
- vb.net - 在 AutoCAD 运行期间编辑 Program Files 目录中的 Settings.txt 文档
- linux - PATH 变量中带有冒号的目录