Pular para o conteúdo

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.

GraphQL Schema

Document

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

  1. Cole o schema no editor GraphQL Schema e suas queries, mutations ou subscriptions nomeadas no editor Document.
  2. Escolha o destino no menu de saída: TypeScript React Apollo, TypeScript Apollo Angular, TypeScript Stencil Apollo ou TypeScript urql.
  3. 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.

Especificações e referências