【问题标题】:Apollo - How to pass a Union type to ApolloClientApollo - 如何将联合类型传递给 ApolloClient
【发布时间】:2021-04-02 01:35:28
【问题描述】:

我正在使用 Shopify GraphQL 来应用如下所示的突变。

我想在我声明过的那个突变中为 ShopifyReturnUrl 声明一个联合类型:

import gql from 'graphql-tag';

const shopifyReturnUrl = gql`
  union ShopifyReturnUrl = String | URL
`;

但是,我实际上如何将它放入当前定义如下的 ApolloClient 实例中:

const client = new ApolloClient({
    fetchOptions: {
        credentials: 'include'
    },
});

对于上下文,我在我的 React 应用程序中使用它,如下所示:

<ApolloProvider client={client}>
    <Component {...pageProps} />
</ApolloProvider>

最后,我真正想使用的突变ShopifyReturnUrl

export const SUBSCRIPTION_MODIFY = gql`
  mutation($subName: String!, $subPrice: String!, $returnUrl: ShopifyReturnUrl) {
    appSubscriptionCreate(
        name: $subName
        returnUrl: $returnUrl
      ) 
  }
`

任何帮助表示赞赏。

谢谢。

【问题讨论】:

    标签: graphql apollo react-apollo


    【解决方案1】:

    这里有几个问题:

    • 只能为对象类型创建联合,而不是像String 这样的标量。
    • 类型定义写在服务器上,而不是客户端上。作为客户端,您无法向服务器公开的架构添加其他类型,因为服务器不知道如何处理这些类型。
    • 如果appSubscriptionCreate 采用returnUrl 参数,则传递给该参数的变量(在本例中名为$returnUrl)应该与参数的类型相同。如果您不知道参数的类型,请检查您的服务器的documentation 或其GraphiQL interface(如果它公开了一个)。在这种特定情况下,参数的类型是 URL!,所以这就是您的变量应该是什么。

    【讨论】:

    • 谢谢。实际上,我发现根本不需要使用 String 作为其中一种类型,因此我这边不需要联合(正如您的第三点所证实的那样)。尽管如此,以上都是有用的知识,以供将来参考。干杯!
    猜你喜欢
    • 2018-12-18
    • 1970-01-01
    • 2017-08-26
    • 1970-01-01
    • 1970-01-01
    • 2022-07-20
    • 2018-10-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多