graphql - React-apollo 的动态突变文档

标签 graphql react-apollo apollo-client

我需要动态更改我的突变文档,以便能够在单个突变中创建多个项目。所以我有这个函数createOrderName,它接受一个整数并能够创建正确的突变文档。例如。 createOrderName(2) 获取

mutation createOrderMut($input0: AddToOrderMenuItemConnectionInput!, $input1: AddToOrderMenuItemConnectionInput!) {
  input0: addToOrderMenuItemConnection (input:$input0) {
    changedOrderMenuItem {
      id
    }
  }
  input1: addToOrderMenuItemConnection (input:$input1) {
    changedOrderMenuItem {
      id
    }
  }
}

我的容器如下。

const CartContainer = compose(
  graphql(createOrderName(2), {
    props: ({ mutate }) => ({
      addToOrderMenuItem: (menus, orderId) => mutate({
        variables: createOrdersInput(menus, orderId)
      })
    })
  })
)(CartView)

现在我如何将整数值传递给这个突变,以便它创建正确的突变文档?目前它已修复为 2,但我需要它更加灵活,以便我可以创建任意数量的项目...

最佳答案

这听起来像是您正在使用的后端的一个不幸的限制。进行批量突变的正确方法是在服务器上有一个突变字段,该字段接受包含要插入的所有项目的列表参数。因此,Apollo 并非旨在支持使用标准 react-apollo API 生成此类动态查询。这是因为我们坚信使用静态查询比在运行时生成字段要好得多:https://dev-blog.apollodata.com/5-benefits-of-static-graphql-queries-b7fa90b0b69a#.hp710vxe7

不过,鉴于这种情况,听起来动态生成突变字符串是一个不错的选择。您可以直接使用 Apollo 来完成此操作,而不是通过 graphql HoC。您可以使用 withApollo HoC 来执行此操作:http://dev.apollodata.com/react/higher-order-components.html#withApollo

import { withApollo } from 'react-apollo';

const MyComponent = ({ client }) => {
  function mutate() {
    const dynamicMutationString = // generate mutation string here

    client.mutate({
      mutation: gql`${dynamicMutationString}`,
      variables: { ... },
    }).then(...);
  }

  return <button onClick={mutate}>Click here</button>;
}

const MyComponentWithApollo = withApollo(MyComponent);

我们构建这个额外的 API 就是为了这个目的——当标准的东西还不够的时候。

这里是 mutate 顺便说一句:http://dev.apollodata.com/core/apollo-client-api.html#ApolloClient.mutate

关于graphql - React-apollo 的动态突变文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41993034/

相关文章:

react-native - GraphQL 服务器可以返回图像吗?

javascript - GraphQL.js - 使用接口(interface)作为 resolveType 函数中的默认(回退)类型

node.js - Apollo GraphQL 中的上下文与 RootValue

javascript - 在 React Apollo 查询返回后调度 Redux 操作

reactjs - Apollo 客户端持久缓存不起作用

reactjs - 有没有办法在 MockedProvider - Apollo Client 中模拟 refetch?

angular - apollo.watchQuery 堆栈/重复 = 性能问题?

node.js - 使用 GraphQL Apollo 跟踪在线用户

javascript - react : UI Flickering When State Updated

graphql - Apollo 客户端 : can apollo-link-rest resolve relations between endpoints?