0Pricing
TypeScript Academy · บทเรียน

ไคลเอนต์ GraphQL ที่ระบุชนิดด้วย Apollo และ urql

ใช้ฮุกและการดำเนินการที่สร้างขึ้นสำหรับคำค้นหาที่ปลอดภัยด้านชนิด

ไคลเอนต์ GraphQL ที่ระบุชนิดด้วย Apollo และ urql เป็นบทเรียน TypeScript Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน TypeScript Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส TypeScript Academy มีบทเรียนทั้งหมด 4 บทเรียน

ปัญหาการกำหนดชนิดข้อมูลให้ไคลเอ็นต์

ไคลเอ็นต์ GraphQL อย่าง Apollo และ urql จะส่งคืนข้อมูลที่มีชนิดข้อมูลเป็น any โดยค่าเริ่มต้น เครื่องมือสร้างโค้ดจะสร้างฮุกและการดำเนินการที่มีชนิดข้อมูล ซึ่งทำให้คิวรีมีความปลอดภัยของชนิดข้อมูลอย่างสมบูรณ์

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

ปลั๊กอินการดำเนินการสำหรับ Apollo

เพิ่ม @graphql-codegen/typescript-react-apollo เพื่อสร้างฮุก React ที่มีชนิดข้อมูลสำหรับการดำเนินการแต่ละรายการในไฟล์ .graphql ของคุณ

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

codegen.yml สำหรับฮุกของ Apollo

กำหนดไฟล์การดำเนินการ .graphql และ schema ให้ codegen เพื่อสร้างฮุกที่มีชนิดข้อมูล

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

การเขียน query ที่มีชนิดข้อมูล

เขียนการดำเนินการ GraphQL ในไฟล์ .graphql แล้วใช้ฮุกที่สร้างขึ้นในคอมโพเนนต์ของคุณ

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

การใช้ฮุกที่สร้างขึ้น

นำเข้าฮุกที่สร้างขึ้นซึ่งมีการระบุชนิดข้อมูลครบถ้วน โดย variables, data, loading และ error ล้วนปลอดภัยด้านชนิดข้อมูลด้วย 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 ร่วมกับการสร้างโค้ด

สำหรับ urql ให้ใช้ @graphql-codegen/typescript-urql เพื่อสร้างตัวห่อหุ้มฮุกที่มีชนิดข้อมูล

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

TypedDocumentNode

แนวทางระดับพื้นฐานที่สุด: ใช้ TypedDocumentNode จาก @graphql-typed-document-node/core เพื่อผูกชนิดข้อมูลกับโหนดเอกสารโดยไม่ต้องพึ่งฮุกเฉพาะเฟรมเวิร์ก

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

ชนิดข้อมูลของแฟรกเมนต์

Codegen ยังสร้างชนิดข้อมูลสำหรับแฟรกเมนต์ GraphQL ได้ด้วย ทำให้สามารถประกอบแฟรกเมนต์ในคอมโพเนนต์ได้อย่างปลอดภัยด้านชนิดข้อมูล

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

mutation ที่มีชนิดข้อมูล

Codegen ยังสร้างฮุก mutation ที่มีชนิดข้อมูล พร้อม variables และข้อมูลผลลัพธ์ที่ระบุชนิดข้อมูลด้วย

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

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

ทำให้การดำเนินการสอดคล้องกัน

เมื่อ schema เปลี่ยนแปลง ให้เรียกใช้ codegen อีกครั้ง การเพิ่มขั้นตอน validate-queries จะช่วยตรวจจับการดำเนินการที่อ้างอิงฟิลด์ซึ่งถูกลบหรือเปลี่ยนชื่อ

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

สรุป: ไคลเอ็นต์ GraphQL ที่มีชนิดข้อมูล

Codegen สร้างฮุกที่มีชนิดข้อมูลสำหรับ Apollo และ urql จากไฟล์การดำเนินการ .graphql ของคุณ ทำให้ variables, ข้อมูลจาก query และรูปร่างของแฟรกเมนต์ปลอดภัยด้านชนิดข้อมูลอย่างครบถ้วน โดยไม่ต้องดูแลชนิดข้อมูลด้วยตนเอง

ตรวจสอบความเข้าใจ

ฮุก GraphQL ที่สร้างและระบุชนิดข้อมูลมีอะไรให้มากกว่าการใช้เอกสารดิบ

สิ่งที่คุณได้เรียนรู้

ไคลเอ็นต์ GraphQL ที่มีชนิดข้อมูลใช้ codegen เพื่อสร้างฮุกสำหรับ Apollo และ urql โดยมี variables และข้อมูลที่ระบุชนิดข้อมูลครบถ้วน เขียนการดำเนินการในไฟล์ .graphql เรียกใช้ codegen แล้วรับความปลอดภัยด้านชนิดข้อมูลตั้งแต่ schema ไปจนถึงคอมโพเนนต์

คำถามที่พบบ่อย

บทเรียน “ไคลเอนต์ GraphQL ที่ระบุชนิดด้วย Apollo และ urql” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “ไคลเอนต์ GraphQL ที่ระบุชนิดด้วย Apollo และ urql” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส TypeScript Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส TypeScript Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “ไคลเอนต์ GraphQL ที่ระบุชนิดด้วย Apollo และ urql”

ใช้ฮุกและการดำเนินการที่สร้างขึ้นสำหรับคำค้นหาที่ปลอดภัยด้านชนิด คุณปฏิบัติ TypeScript Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน TypeScript Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน TypeScript Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน

บทเรียน “ไคลเอนต์ GraphQL ที่ระบุชนิดด้วย Apollo และ urql” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน TypeScript Academy นี้ได้ไหม

ได้ บทเรียน TypeScript Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. สคีมา GraphQL เป็นชนิด TypeScript
  2. ตัวแก้ไข GraphQL ที่ระบุชนิดด้วย GraphQL Code Generator
  3. ไคลเอนต์ GraphQL ที่ระบุชนิดด้วย Apollo และ urql
  4. ความปลอดภัยของชนิดตั้งแต่ต้นจนจบ: เวิร์กโฟลว์เริ่มจากสคีมา
← กลับไปที่ TypeScript Academy