Bater no chão correndo com o Codegen GraphQL e WooGraphQL

Neste tutorial, vamos guiá-lo através do GraphQL-Codegen e WPGraphQL/WooGraphQL para criar uma página de produto simples para o seu site WordPress-powered eCommerce. Estaremos focando em gerar definições de tipo TypeScript e componentes React para consultas e mutações com a ajuda do GraphQL-Codegentypescriptereact-typescriptplugins.

Vamos criar um estudo de caso passo a passo para demonstrar o processo de criação de uma página de produto que recupera dados usando WooGraphQL. No final deste tutorial, você terá uma melhor compreensão de como usar o GraphQL-Codegen e o WPGraphQL/WooGraphQL para construir aplicativos de eCommerce eficientes e flexíveis.

Pré-requisitos

  • Um site WordPress com WPGraphQL e WooGraphQL plugins instalados e ativados
  • Uma compreensão básica de GraphQL e React

Passo 1: Instalar GraphQL-Codegen e plugins necessários

Primeiro, vamos instalar o GraphQL-Codegen e os plugins necessários:

npm install --save-dev @graphql-codegen/cli @graphql-codegen/typescript @graphql-codegen/react-typescript

Passo 2: Configurar o código gráficoQL

Criar umcodegen.ymlarquivo na raiz do seu projeto com o seguinte conteúdo:

schema: 'https://your-wordpress-site.com/graphql'
documents: './src/**/*.graphql'
generates:
  ./src/generated/graphql.tsx:
    plugins:
      - typescript
      - react-typescript

Substituirhttps://your-wordpress-site.com/graphqlcom a URL do ponto final GraphQL do seu site WordPress.

Passo 3: Criar um.graphqlarquivo para sua consulta

Criar umsrc/queriesdiretório e aGetProduct.graphqlarquivo dentro dele:

query GetProduct($id: ID!) {
  product(id: $id) {
    id
    name
    description
    image {
      sourceUrl
    }
    ... on SimpleProduct {
      isOnSale
      regularPrice
      salePrice
    }
    ... on VariableProduct {
      isOnSale
      regularPrice
      salePrice
    }
  }
}

Esta consulta obtém os dados do produto, incluindo o nome, descrição, imagem, preço regular e preço de venda.

Passo 4: Gerar TipoScript tipos e Reagir componentes

Execute o seguinte comando para gerar os tipos TypeScript e React componentes:

npx graphql-codegen

O geradographql.tsxarquivo será localizado no./src/generateddirectório.

Passo 5: Criar o componente da página do produto

Agora, vamos criar um componente de página de produto que use os componentes e tipos de React gerados:

import { GetProduct } from '../generated/graphql';
import { useQuery } from '@apollo/client';

function ProductPage({ productId }) {
  const { loading, error, data } = useQuery(GetProduct, {
    variables: { id: productId },
  });

  if (loading) return <p>Loading...</p>;
  if (error) return <p>Error: {error.message}</p>;

  const { product } = data;

  return (
    <div>
      <h1>{product.name}</h1>
      <img src={product.image.sourceUrl} alt={product.name}/>
      <p>{product.description}</p>
      {product.isOnSale ? (
        <p>
          <del>{product.regularPrice}</del> {product.salePrice}
        </p>
      ) : (
        <p>{product.regularPrice}</p
      )}
    </div>
  );
}

AProductPagecomponente recebe oproductIdcomo um adereço e usa o useQuery hook da Apollo Client para obter os dados do produto usando oGetProductconsulta. Em seguida, exibe o nome do produto, imagem, descrição e preço, juntamente com o preço de venda, se disponível.

Passo 6: Integrar o componente ProductPage em sua aplicação

Agora você pode importar e usar oProductPagecomponente na sua aplicação. Passar oproductIdadere com o ID do produto desejado, e o componente irá exibir os detalhes do produto.

Completando

Parabéns! Você usou com sucesso GraphQL-Codegen e WPGraphQL/WooGraphQL para criar uma página de produto simples para o seu site WordPress-powered eCommerce. Ao aproveitar o poder do GraphQL e TypeScript, você tornou sua aplicação mais eficiente e flexível.

No próximo post, cobriremos a criação do botão add to cart e sua funcionalidade, incluindo como lidar com produtos já no carrinho de compras. Fiquem ligados!



Leave a Reply

Your email address will not be published. Required fields are marked *