#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 в качестве одного из типов вообще не требуется, поэтому с моей стороны объединение не требуется (что подтверждается вашим третьим пунктом). Тем не менее, вышесказанное является полезным знанием для дальнейшего использования. Приветствия!