Graphql 如何从盖茨比中的降价创建像页面一样的组件?

Graphql 如何从盖茨比中的降价创建像页面一样的组件?,graphql,markdown,gatsby,Graphql,Markdown,Gatsby,我正在学习盖茨比,并试图扩展他们的教程,这给你留下了一个类似博客的网站。每个帖子都是从标记文件生成的,使用Graphql查询,并通过onCreateNode和createPages进行处理 我想为作者bios创建可以包含在这些生成页面中的标记文件。然后,如果一个bio发生了更改,那么标记将在一个地方更改,而不是手动更改该作者编写的每个标记文件 是否有可能为组件生成类似的工作流?或者我可以将作者的姓名/bio文件名传递给执行查询并处理结果标记的组件吗 编辑:考虑到这一点,我不认为我的bios相对于

我正在学习盖茨比,并试图扩展他们的教程,这给你留下了一个类似博客的网站。每个帖子都是从标记文件生成的,使用Graphql查询,并通过onCreateNode和createPages进行处理

我想为作者bios创建可以包含在这些生成页面中的标记文件。然后,如果一个bio发生了更改,那么标记将在一个地方更改,而不是手动更改该作者编写的每个标记文件

是否有可能为组件生成类似的工作流?或者我可以将作者的姓名/bio文件名传递给执行查询并处理结果标记的组件吗


编辑:考虑到这一点,我不认为我的bios相对于组件降价有多大好处。如果有一个用于格式的组件AuthorBio和几个组件(如JohnDoeBio或JaneSmithBio)返回一个AuthorBio,并在道具中传递一些信息以供呈现,这会是一种糟糕的形式吗?我很确定我可以从我的降价中引用这些组件,或者让我的模板根据frontmatter选择它们,尽管这可能会导致一个大的切换…

我有完全相同的思考过程!我就是这样解决的:

BlogPostTemplate.jsx

<Layout>
  <ShortBio {...authorData} /> // show the author bio on top of the blog post
  <div
    className="blog-post"
    dangerouslySetInnerHTML={{ __html: html }} // your markup as HTML
  />
</Layout>
使用Gatsby和GraphQL的强大功能,通过标记中的元数据确定作者。看看GraphQL查询:我定义了一个author标记,因此我可以在博客文章的标记中动态设置一个author

或者我可以将作者的姓名/bio文件名传递给 是否执行查询并处理结果降价

是的,在降价的正面使用作者标签

---
title: Hello World
date: "2018-01-15"
author: "Solid Snake"
---
编辑:我已经考虑过了,我看不到降价有什么好处 对于我的bios vs组件。有一个组件会是一种不好的形式吗 AuthorBio的格式和一些组件,如JohnDoeBio或 它返回一个AuthorBio,并传入一些信息 要为他们渲染的道具?我相当肯定我可以参考这些 从我的降价中选择组件,或者让我的模板根据 前沿问题,虽然这可能会导致一个大的转变

如果您可以自信地声明作者的数量仍然很小,那么创建几个静态作者组件就可以了。要务实。照你说的做

export const blogQuery = graphql`
  query ($slug: String!) {
    blog: markdownRemark(fields: {slug: {eq: $slug}}) {
      html
      frontmatter {
        title
        date(formatString: "DD MMMM YYYY")
        author
      }
      excerpt(pruneLength: 165)
      fields {slug}
      wordCount {
        words
      }
    }
  }
`;
---
title: Hello World
date: "2018-01-15"
author: "Solid Snake"
---