【问题标题】:How to create list of strings in markdown frontmatter?如何在 markdown frontmatter 中创建字符串列表?
【发布时间】:2019-10-28 00:56:28
【问题描述】:

我正在尝试使用 gatsbyjs 和 graphql 从 markdown frontmatter 中以列表形式检索数据。鉴于降价文件中的列表,目标是将列表项提取到我的反应组件中以供进一步使用。

这是我的工作,我想使用 GatsbyJS 和 React 创建一个网站(这就是我不能分享真实代码的原因)。 到目前为止,我尝试通过 GraphQL 从 frontmatter 中简单地获取数据,但该字段未定义或仅包含 null 值。

我有这样的前题:

---
name: "someName"
expertise: "someExpertise"
...
technologies: 
- tech1
- tech2
- tech3
---

在我的 js 代码中,我尝试使用 graphql 获取数据,如下所示:

query($slug: String!) {
    profile: markdownRemark(fields: { slug: { eq: $slug } }) {
      html
      frontmatter {
        date(formatString: "DD MMMM, YYYY")
        author
        expertise
        name
        dev_type
        degree 
        technologies
      }
    }
}

我希望输出匹配这样的形式:

technologies = ["tech1", "tech2", "tech3"]

但在开发环境中尝试编译和运行站点时出现以下错误:

案例 1。

Errors:
  Int cannot represent non-integer value: "tech1"

我不知道如何解决这个问题。据我了解,这应该有效。已经尝试在gatsby-node.js 中创建名为technologies 的新NodeField,但这也不起作用。

我还根据这个frontmatter想到了另一件事,在我的理解frontmatter是一个YAML,或者更确切地说,markdown文件中所需的技术列表是一个YAML列表,不是吗?
在这种情况下,我应该在gatsby-config.js 中调整/扩展gatsby-transformer-yaml 插件,但我不知道如何以正确/正确的方式实现这一点。

案例 2。

不幸的是,我无法再重现我的查询,但我找到了一种方法,我没有收到类型错误,但是 technologies 只包含 null 值(具有相同的 frontmatter 内容)。

technologies = [ null, null, null, ...]

【问题讨论】:

  • technologies: ["tech1", "tech2", "tech3"] 呢?
  • 谢谢,显然这就是我用案例 2 中描述的结果查询的方式。
  • 你运行的是哪个版本的 gatsby?
  • 欢迎来到Stack Overflow。请忽略细节(谢谢等)和所有其他分散注意力的东西(根据tour)。另外:在句子中间使用“i”已经够糟糕了(在我的非母语人士眼中),如果不是在一个句子中一致使用,那就更糟了:请让你的读者容易理解。

标签: reactjs graphql yaml gatsby graphql-js


【解决方案1】:

发现technologies: [ tech1, tech2, tech3 ] 是这个问题的解决方案。实际问题是我的降价文件中提供的数据不一致。

【讨论】:

    猜你喜欢
    • 2021-10-19
    • 2021-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-09
    相关资源
    最近更新 更多