【问题标题】:How can i run one mutation multiple times with different arguments in one request?如何在一个请求中使用不同的参数多次运行一个突变?
【发布时间】:2018-11-26 02:58:23
【问题描述】:

我有一个突变:

const createSomethingMutation = gql`
  mutation($data: SomethingCreateInput!) {
    createSomething(data: $data) {
      something {
        id
        name
      }
    }
  }
`;

如何在一个请求中创建多个Somethings?我是否需要像这样在我的 GraphQL 服务器上创建一个新的 Mutation:

mutation {
  addManySomethings(data: [SomethingCreateInput]): [Something]
} 

或者有没有一种方法可以在一个请求中多次使用来自 Apollo 客户端的现有 createSomethingMutation 和不同的参数?

【问题讨论】:

    标签: graphql apollo graphql-js react-apollo apollo-client


    【解决方案1】:

    没那么容易。

    因为突变有一个一致的名称,graphql 不允许在一个查询中多次执行相同的操作。因此,要使其正常工作,Apollo 必须将突变映射到别名,然后甚至将 variables 数据映射到某种未知的可迭代形式,我非常怀疑它确实如此。

    【讨论】:

      【解决方案2】:

      您实际上可以使用别名来做到这一点,并为每个别名单独变量:

      const createSomethingMutation = gql`
        mutation($dataA: SomethingCreateInput!) {
          createA: createSomething(data: $dataA) {
            something {
              id
              name
            }
          }
          createB: createSomething(data: $dataB) {
            something {
              id
              name
            }
          }
        }
      `;
      

      您可以查看更多别名示例in the spec

      然后你只需要提供一个带有两个属性的变量对象——dataAdataB。但是,如果您需要动态的突变数量,事情可能会变得非常混乱。通常,在这种情况下,只公开一个突变来处理创建/更新一个或多个模型实例可能更容易(也更有效)。

      如果您想减少从客户端到服务器的网络请求数量,您还可以查看query batching

      【讨论】:

        猜你喜欢
        • 2020-06-24
        • 2019-07-29
        • 2020-05-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-19
        相关资源
        最近更新 更多