【发布时间】: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