Преобразование GraphQL в компоненты React — Numio
Генерирует типизированный код загрузки данных для каждой операции в панели Document: хуки React Apollo (по умолчанию), сервисы Apollo Angular, компоненты Stencil Apollo или хуки urql, вместе с TypeScript-типами схемы и операций.
Получить готовые хуки useXQuery и useXLazyQuery для React-приложения на Apollo Client из только что написанного запроса.
Когда пригодится
- Получить готовые хуки useXQuery и useXLazyQuery для React-приложения на Apollo Client из только что написанного запроса.
- Сравнить, как одна и та же операция выглядит в виде внедряемого сервиса Apollo Angular или хука urql, прежде чем выбрать клиент.
Как пользоваться
- Вставьте схему в редактор GraphQL Schema, а именованные queries, mutations или subscriptions — в редактор Document.
- Выберите цель в выпадающем списке вывода: TypeScript React Apollo, TypeScript Apollo Angular, TypeScript Stencil Apollo или TypeScript urql.
- Скопируйте в проект сгенерированную константу документа (например, GetUserDocument) и хуки, сервисы или компоненты.
GraphQL-схема + document
# GraphQL Schema editor
type Query {
user(id: ID!): User
}
type User {
id: ID!
name: String
tags: [String!]!
}
# Document editor
query GetUser($id: ID!) {
user(id: $id) { id name }
}TypeScript-компоненты и хуки
import { gql } from "@apollo/client"
import * as Apollo from "@apollo/client"
…
export const GetUserDocument = gql`
query GetUser($id: ID!) {
user(id: $id) {
id
name
}
}
`
…
export function useGetUserQuery(
baseOptions: Apollo.QueryHookOptions<GetUserQuery, GetUserQueryVariables>,
) {
const options = { ...defaultOptions, ...baseOptions }
return Apollo.useQuery<GetUserQuery, GetUserQueryVariables>(
GetUserDocument,
options,
)
}
…Подробности и ограничения
Каждый вариант сначала запускает @graphql-codegen/typescript и typescript-operations, поэтому вывод также содержит полные типы схемы и операций (выше опущены).
React Apollo импортирует gql и хуки из @apollo/client; urql и Stencil импортируют gql из graphql-tag; Apollo Angular генерирует классы @Injectable, например GetUserGQL.
Без корректной операции в редакторе Document хуки и компоненты не генерируются; документ, не соответствующий схеме, пропускается с комментарием-предупреждением. Генерация выполняется в Web Worker в браузере.
FAQ
Почему baseOptions обязателен в useGetUserQuery?
У запроса есть non-null переменная ($id: ID!), поэтому сгенерированный хук требует options с variables. Запросы без обязательных переменных получают необязательный параметр baseOptions.
Есть ли в выводе React Apollo хуки ленивых запросов?
Да. Для каждого запроса генерируются useXQuery и useXLazyQuery, а также псевдонимы типов результата, например GetUserQueryHookResult и GetUserQueryResult. Для mutations создаётся хук useXMutation.
Можно ли изменить опции плагина, например withHooks или источник импорта?
Нет. Страница запускает каждый плагин с конфигурацией по умолчанию и предлагает только выпадающий список цели вывода.