Gerar componentes React a partir de GraphQL — Numio
Gera código tipado de busca de dados para cada operação do painel Document: hooks do React Apollo (padrão), serviços do Apollo Angular, componentes do Stencil Apollo ou hooks do urql, junto com os tipos TypeScript do schema e das operações.
Obter hooks useXQuery e useXLazyQuery prontos para um app React com Apollo Client a partir de uma query que você acabou de escrever.
Quando usar
- Obter hooks useXQuery e useXLazyQuery prontos para um app React com Apollo Client a partir de uma query que você acabou de escrever.
- Comparar como a mesma operação fica como serviço injetável do Apollo Angular ou como hook do urql antes de escolher o cliente.
Como usar
- Cole o schema no editor GraphQL Schema e suas queries, mutations ou subscriptions nomeadas no editor Document.
- Escolha o destino no menu de saída: TypeScript React Apollo, TypeScript Apollo Angular, TypeScript Stencil Apollo ou TypeScript urql.
- Copie para o seu projeto a constante de documento gerada (por exemplo GetUserDocument) e os hooks, serviços ou componentes.
Schema GraphQL + documento
# 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 }
}Componentes e hooks 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,
)
}
…Detalhes e limitações
Cada opção executa primeiro @graphql-codegen/typescript e typescript-operations, então a saída também contém os tipos completos do schema e das operações (omitidos acima).
O React Apollo importa gql e os hooks de @apollo/client; urql e Stencil importam gql de graphql-tag; o Apollo Angular gera classes @Injectable como GetUserGQL.
Sem uma operação válida no editor Document, nenhum hook ou componente é gerado; um documento que não corresponde ao schema é ignorado com um comentário de aviso. A geração roda em um Web Worker do navegador.
FAQ
Por que baseOptions é obrigatório em useGetUserQuery?
A query tem uma variável não nula ($id: ID!), então o hook gerado exige opções contendo variables. Queries sem variáveis obrigatórias recebem um parâmetro baseOptions opcional.
A saída do React Apollo inclui hooks de lazy query?
Sim. Para cada query são gerados useXQuery e useXLazyQuery, além de aliases de tipo de resultado como GetUserQueryHookResult e GetUserQueryResult. Mutations recebem um hook useXMutation.
Posso alterar opções do plugin como withHooks ou a origem dos imports?
Não. A página executa cada plugin com a configuração padrão e oferece apenas o menu de destino da saída.