0Pricing
TypeScript Academy · Lekcja

Typowany klient GraphQL z Apollo i urql

Używaj wygenerowanych hooków i operacji do bezpiecznych typowo zapytań.

Typowany klient GraphQL z Apollo i urql to bezpłatna lekcja TypeScript Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej TypeScript Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs TypeScript Academy zawiera 4 lekcji w sumie.

Problem typowania klienta

Klienci GraphQL, tacy jak Apollo i urql, domyślnie zwracają dane o typie any. Codegen generuje typowane hooki i operacje, dzięki którym zapytania są w pełni bezpieczne typowo.

// Without codegen: data is any
const { data } = useQuery(GET_USER);
data.user; // any — no safety

Wtyczka operacji dla Apollo

Dodaj @graphql-codegen/typescript-react-apollo, aby wygenerować typowane hooki React dla każdej operacji w plikach .graphql.

npm install --save-dev @graphql-codegen/typescript-operations
npm install --save-dev @graphql-codegen/typescript-react-apollo

codegen.yml dla hooków Apollo

Wskaż w codegen pliki operacji .graphql oraz schemat, aby wygenerować typowane hooki.

# codegen.yml
documents: "src/**/*.graphql"
generates:
  src/generated/operations.ts:
    plugins:
      - typescript
      - typescript-operations
      - typescript-react-apollo

Pisanie typowanego zapytania

Zapisz operację GraphQL w pliku .graphql i użyj wygenerowanego hooka w komponencie.

# src/queries/GetUser.graphql
query GetUser($id: ID!) {
  user(id: $id) {
    id
    name
    email
  }
}

Korzystanie z wygenerowanego hooka

Zaimportuj wygenerowany, w pełni typowany hook: zmienne, dane, stan ładowania i błędy są bezpieczne typowo w TypeScript.

import { useGetUserQuery } from "./generated/operations";

function UserCard({ id }: { id: string }) {
  const { data, loading } = useGetUserQuery({ variables: { id } });
  if (loading) return <p>Loading...</p>;
  return <p>{data?.user?.name}</p>; // data.user: User | null — typed
}

urql z codegen

W przypadku urql użyj @graphql-codegen/typescript-urql, aby wygenerować typowane opakowania hooków.

npm install --save-dev @graphql-codegen/typescript-urql
# Similar codegen.yml configuration, generates useGetUserQuery for urql

TypedDocumentNode

Podejście najniższego poziomu: użyj TypedDocumentNode z @graphql-typed-document-node/core, aby dołączyć typy do węzłów dokumentów bez hooków zależnych od konkretnego frameworka.

import { TypedDocumentNode } from "@graphql-typed-document-node/core";
const GetUserDoc: TypedDocumentNode<GetUserQuery, GetUserQueryVariables> = gql`...`;
// Works with Apollo, urql, and any GraphQL client that supports it

Typy fragmentów

Codegen generuje również typy dla fragmentów GraphQL, umożliwiając bezpieczne typowo komponowanie fragmentów w komponentach.

# UserFields.graphql
fragment UserFields on User {
  id
  name
}
# Generated: UserFieldsFragment type — use as prop type

Typowane mutacje

Codegen generuje także typowane hooki mutacji wraz z typowanymi zmiennymi i danymi wynikowymi.

import { useCreateUserMutation } from "./generated/operations";

const [createUser, { loading }] = useCreateUserMutation();
// createUser({ variables: { input: { name, email } } })
// — variables are fully typed

Utrzymywanie zgodności operacji

Po zmianie schematu uruchom ponownie codegen. Dodanie kroku validate-queries pozwala wykryć operacje odwołujące się do usuniętych lub przemianowanych pól.

npx graphql-codegen --check
# or with graphql-inspector:
npx graphql-inspector validate ./src/**/*.graphql ./api/schema.graphql

Podsumowanie: typowani klienci GraphQL

Codegen generuje typowane hooki dla Apollo i urql na podstawie plików operacji .graphql. Zapewnia to pełne bezpieczeństwo typów dla zmiennych, danych zapytań i kształtów fragmentów — bez konieczności ręcznego utrzymywania typów.

Szybkie sprawdzenie

Co zapewnia wygenerowany, typowany hook GraphQL w porównaniu z użyciem surowego dokumentu?

Czego się Państwo nauczyli

Typowani klienci GraphQL korzystają z codegen do generowania hooków z w pełni typowanymi zmiennymi i danymi dla Apollo i urql. Należy zapisywać operacje w plikach .graphql, uruchamiać codegen i uzyskiwać bezpieczeństwo typów od schematu aż po komponent.

Często zadawane pytania

Czy lekcja „Typowany klient GraphQL z Apollo i urql” jest bezpłatna?

Tak — pełny tekst „Typowany klient GraphQL z Apollo i urql” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu TypeScript Academy, przejdź na CoddyKit PRO. Kurs TypeScript Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Typowany klient GraphQL z Apollo i urql”?

Używaj wygenerowanych hooków i operacji do bezpiecznych typowo zapytań. Ćwiczysz TypeScript Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć TypeScript Academy?

Nie wymagamy żadnego doświadczenia. TypeScript Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.

Ile czasu zajmuje lekcja „Typowany klient GraphQL z Apollo i urql”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji TypeScript Academy?

Tak. Każda lekcja TypeScript Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Schemat GraphQL na typy TypeScript
  2. Typowane resolvery z GraphQL Code Generator
  3. Typowany klient GraphQL z Apollo i urql
  4. Bezpieczeństwo typów od końca do końca: schemat jako źródło
← Powrót do TypeScript Academy