Apollo - Как передать тип Union в ApolloClient

Я использую 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
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Что такое Apollo Client и зачем он нужен?
Что такое Apollo Client и зачем он нужен?
Apollo Client - это полнофункциональный клиент GraphQL для JavaScript-приложений, который упрощает получение, управление и обновление данных в...
0
0
293
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Здесь есть пара вопросов:

  • Объединения можно создавать только для типов объектов, а не для скаляров, таких как String.
  • Определения типов пишутся на сервере, а не на клиенте. Как клиент, вы не можете добавлять дополнительные типы в схему, предоставляемую сервером, поскольку сервер не знает, как обрабатывать эти типы.
  • Если appSubscriptionCreate принимает аргумент returnUrl, то переменная, которую вы передаете этому аргументу (в данном случае с именем $returnUrl), должна быть того же типа, что и аргумент. Если вы не знаете тип аргумента, проверьте документацию вашего сервера или его интерфейс GraphiQL (если он его предоставляет). В данном конкретном случае тип аргумента — URL!, поэтому ваша переменная должна быть именно такой.

Спасибо за это. На самом деле я понял, что использование String как одного из типов вообще не требуется, поэтому с моей стороны не требуется никакого объединения (что подтверждается вашим третьим пунктом). Тем не менее, вышеизложенное является полезным знанием для дальнейшего использования. Ваше здоровье!

userMod2 23.12.2020 14:49

Другие вопросы по теме