为项目数组建立对象类型的Gatsby。

问题描述 投票:1回答:1

我有一个包含字符串数组的字段--在本例中,它是一个文件名数组,但它可以是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?

graphql gatsby
1个回答
1
投票

我喜欢Stack Overflow的原因之一,以及提问过程--它鼓励你以不同的方式思考问题,后退一步,将问题归结为基本要素。

在写问题和后来重新阅读问题的过程中,我采取了不同的方法,并尝试了 盖茨比 @link 指令.

这种格式取代了冗长的 schema.buildObjectType 句法与下面的。

type ParentYaml implements Node {
   files: [ChildYaml] @link(by: "slug")
},

这正是我想要的 -- files 字段现在将每个文件解析为它自己的 ChildYaml 节点:

© www.soinside.com 2019 - 2024. All rights reserved.