我有一个包含字符串数组的字段--在本例中,它是一个文件名数组,但它可以是ID或任何标识符。我想使用 buildObjectType
来解析这些字符串到另一个Node。换句话说,将一个数组的 String
的外部节点数组。
我曾用 buildObjectType
来解析包含单个标识符的字段中的 Node,但当字段是一个 ID 数组时,还不能让它工作。在单个标识符的情况下,解析器是这样的。
context.nodeModel
.getAllNodes({ type: "ChildYaml" })
.find(child => child.slug === source.child)
现在我需要对一个数组进行迭代,并解析每个项目。
下面是我的字段的一个例子。ParentYaml
档案
files:
- filename1
- filename2
- filename3
- filename4
在 gatsby-config
:
exports.createSchemaCustomization = ({ actions, schema }) => {
const { createTypes } = actions
const typeDefs = [
schema.buildObjectType({
name: "ParentYaml",
fields: {
files: {
type: "ChildYaml",
resolve: (source, args, context, info) => {
// Iterate over context and resolve each item to a filename
},
},
},
})
]
createTypes(typeDefs)
}
我试过以下方法 resolve
,不成功。这将得到一个文件节点,但没有得到 ChildYaml
.
resolve: (source, args, context, info) => {
return source.files.map((fileRef) => {
return context.nodeModel
.getAllNodes({ type: "File" })
.find(file => file.name === fileRef)
})
},
我也试过一个方法来解决 ChildYaml
(而不是 File
),使用 slug
. 这产生了类似的结果------------。resolve
返回一个所需节点的数组,但这些节点在我的页面上下文中不可用。
我如何解析数组的Nodes?
我喜欢Stack Overflow的原因之一,以及提问过程--它鼓励你以不同的方式思考问题,后退一步,将问题归结为基本要素。
在写问题和后来重新阅读问题的过程中,我采取了不同的方法,并尝试了 盖茨比 @link
指令.
这种格式取代了冗长的 schema.buildObjectType
句法与下面的。
type ParentYaml implements Node {
files: [ChildYaml] @link(by: "slug")
},
这正是我想要的 -- files
字段现在将每个文件解析为它自己的 ChildYaml
节点: