在下面的示例中,我们有一个创建帖子的突变。这是一个只有 2 个参数、标题和 url 的简单示例。如果这篇文章有很多论点怎么办。还有其他方法可以传递参数吗?或者只有一个接一个。我们可以传递整个对象吗?
newPost() {
this.apollo.mutate({
mutation: gql`mutation($title: String, $url: String) {
createPost(title: $title, url: $url) {
title
url
}
}
`,
variables: {
title: this.someForm.get('title'),
url: this.someForm.get('url')'
}
}).subscribe(data => {
console.log('New post created!', data);
});
}
这是特定于服务器端实现的内容。例如,服务器的架构可能如下所示:
type Mutation {
createPost(title: String! url: String!): Post
}
在这种情况下,如果您使用变量,作为客户端,您被迫为每个参数使用一个变量,因为 GraphQL 不支持某种"传播"语法。但是,架构可以利用输入对象类型对多个参数进行分组,如下所示:
type Mutation {
createPost(input: CreatePostInput!): Post
}
input CreatePostInput {
title: String!
url: String!
}
在这种情况下,您可以使用单个变量作为对象:
mutation($input: CreatePostInput!) {
createPost(input: $input) {
title
url
}
}
但是,同样,架构必须支持这种用法。作为客户,您无法控制这一点。