【问题标题】:GraphQL array/list variables?GraphQL 数组/列表变量?
【发布时间】:2020-07-05 08:32:48
【问题描述】:

我想使用数组/列表作为 GraphQL 突变的变量,如下所示:

架构

type User {
  id: Id!
  email: String
  name: String
  bookmarks: [Bookmark]
}

type Mutation {
  updateUser(data: UserInput!): User
}

input UserInput {
  email: String
  name: String
  bookmarks: [Bookmark]
}

type Bookmark {
  vidId: String!
  timestamp: Int!
}

变异

mutation($email: String, $name: String, $bookmarks: [{vidId: String!, timestamp: Int!}]) {
  updateUser(data: {email: $email, name: $name, bookmarks: $bookmarks}) {
    email
    name
  }
}

但是,关于书签数组的突变中的变量语法似乎无效。如何将数组作为 GraphQL 变量传递?

【问题讨论】:

  • 应该是input Bookmark 而不是type Bookmark
  • 我不确定,Bookmark 也用于输入类型之外的其他地方。输入类型中的所有内容都必须是递归输入类型吗?编辑:我添加了另一种类型来显示这个
  • 是的,I'm pretty certain that they do。您的架构是否有效?
  • 谢谢,我知道了

标签: javascript graphql apollo-client apollo-server


【解决方案1】:

GraphQL 不支持匿名类型声明(即 {vidId: String!, timestamp: Int!} 文字),您必须引用命名类型(或它的列表或它的非 null)。所以就写

mutation($email: String, $name: String, $bookmarks: [BookmarkInput]) {
#                                                    ^^^^^^^^^^^^^
  updateUser(data: {email: $email, name: $name, bookmarks: $bookmarks}) {
    email
    name
  }
}

而不是一个

input BookmarkInput {
  vidId: String!
  timestamp: Int!
}

在您的架构中定义。

【讨论】:

  • 我明白了。这必须是输入类型吗?我以为只有最外层必须是输入类型,因为String,Int不是输入类型
  • @rasperry StringInt 是标量类型(不是对象类型)。这些可以包含在输入和输出类型中。
猜你喜欢
  • 1970-01-01
  • 2019-01-13
  • 1970-01-01
  • 2021-05-20
  • 2021-07-22
  • 2015-12-15
  • 2019-07-29
  • 2018-03-27
  • 1970-01-01
相关资源
最近更新 更多