【问题标题】:GraphQL - spread input argsGraphQL - 传播输入参数
【发布时间】:2017-10-03 22:33:11
【问题描述】:

我正在尝试使用具有各种字段的类型指定 GraphQL 模式,并且还允许您使用相同的参数递归地附加 OR: [...]。我已经让它像这样工作了

input BookFilters {
  _id: String
  title: String
  title_contains: String
  title_startsWith: String
  title_endsWith: String
  OR: [BookFilters]
}

type Query {
   allBooks(_id: String
     title: String
     title_contains: String
     title_startsWith: String
     title_endsWith: String
     OR: [BookFilters]
   ): [Book]
}

效果很好,这个查询

{
  allBooks(title_endsWith: "1", OR: [{ title: "2" }, {title:"3"}, {OR: [{title_contains: "Q"}, {OR:[{title:"Q"}]}]}]) {
    _id
    title
  }
}

通过就好了。

我的问题是,有什么方法可以删除重复项吗?理想情况下,如果

type Query {
   allBooks(...BookFilters): [Book]
}

有效,但似乎无效。


编辑 - 评论带来了片段。它们只能被声明为 off of 一种类型,对吧?所以我仍然需要创建一个新类型来列出我的所有查询参数,然后从中制作一个片段,重新列出所有字段?

即使不是这样,GraphQL 似乎仍然不喜欢在输入参数上传播。

fragment BookFiltersFragment on BookFilters {
    _id
}

type Query {
   allBooks(...BookFiltersFragment): [Book]
}

... 上出现的错误

【问题讨论】:

  • 这让我想起了片段。看看这个:dev.apollodata.com/react/fragments.html
  • 抱歉,这是 Apollo,如果您正在使用它,请查看原版文档。
  • 是的 - 我看到了片段。它们只在 Type 上声明,对吧?无论如何,我似乎仍然无法在查询参数上传播片段
  • 你已经完成了我的帮助;干得好,这是你发现的一个相当野兽模式的考虑因素。

标签: javascript graphql apollo


【解决方案1】:

为了任何人的利益,这似乎是不可能的,至少根据 Apollo 开发人员的说法。

https://twitter.com/stubailo/status/914997054098759680

https://twitter.com/stubailo/status/914997127356366848

【讨论】:

    【解决方案2】:

    我们从纯 JS 而不是查询语言构建我们的架构,并且能够使用传播,因为我们的参数是纯旧的 javascript 对象。我相信“GraphQLInputType”是一个成熟的实例化,不会轻易传播。

    【讨论】:

      猜你喜欢
      • 2020-08-12
      • 2019-02-17
      • 2021-12-05
      • 1970-01-01
      • 2017-07-07
      • 2019-03-24
      • 2019-08-29
      • 2015-12-09
      • 2020-07-21
      相关资源
      最近更新 更多