我有一个突变:
const createSomethingMutation = gql`
mutation($data: SomethingCreateInput!) {
createSomething(data: $data) {
something {
id
name
}
}
}
`;
如何在一个请求中创建多个Something
?我是否需要在我的GraphQL服务器上创建一个新的Mutation,如下所示:
mutation {
addManySomethings(data: [SomethingCreateInput]): [Something]
}
或者有没有办法在一次请求中多次使用Apollo Client中现有的createSomethingMutation
个不同的参数?
答案 0 :(得分:5)
事实上,您可以使用别名执行此操作,并为每个别名分隔变量:
const createSomethingMutation = gql`
mutation($dataA: SomethingCreateInput!) {
createA: createSomething(data: $dataA) {
something {
id
name
}
}
createB: createSomething(data: $dataB) {
something {
id
name
}
}
}
`;
然后,您只需要提供一个包含两个属性的变量对象 - dataA
和dataB
。但是,如果您需要突变的数量是动态的,那么事情会变得相当混乱。通常,在这种情况下,只需暴露单个突变来处理创建/更新模型的一个或多个实例,就可能更容易(也更有效)。
如果您尝试减少从客户端到服务器的网络请求数量,您还可以查看query batching。
答案 1 :(得分:0)
这不可能那么容易。
因为变异具有一个一致的名称,并且graphql不允许在一个查询中多次执行相同的操作。因此,要实现这一点,Apollo必须将突变映射到别名,然后甚至将variables
数据映射到一些未知的可迭代形式,我非常怀疑它。