Apollo — Как передать тип объединения в ApolloClient

#graphql #apollo #react-apollo

#graphql #apollo #реагировать-apollo

Вопрос:

Я использую 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
      ) 
  }
`
 

Любая помощь приветствуется.

Спасибо.

Ответ №1:

Здесь есть пара проблем:

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

Комментарии:

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