如何在 markdown frontmatter 中创建字符串列表?
Posted
技术标签:
【中文标题】如何在 markdown frontmatter 中创建字符串列表?【英文标题】:How to create list of strings in 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”已经够糟糕了(在我的非母语人士眼中),如果不是在一个句子中一致使用,那就更糟了:请让你的读者容易理解。
【参考方案1】:
发现technologies: [ tech1, tech2, tech3 ]
是这个问题的解决方案。实际问题是我的降价文件中提供的数据不一致。
【讨论】:
以上是关于如何在 markdown frontmatter 中创建字符串列表?的主要内容,如果未能解决你的问题,请参考以下文章
Gatsby 如何使用 GraphQL 提供 Markdown frontmatter?
在 markdown 文件中编辑 YAML Frontmatter
GraphQL 忽略了一些(但不是全部)任意分配的 markdown frontmatter 数据
如何在 Gatsby 中将多个 yaml 文件映射到 frontmatter