ไคลเอนต์ 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-apollocodegen.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 urqlTypedDocumentNode
แนวทางระดับพื้นฐานที่สุด: ใช้ 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 typemutation ที่มีชนิดข้อมูล
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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- สคีมา GraphQL เป็นชนิด TypeScript
- ตัวแก้ไข GraphQL ที่ระบุชนิดด้วย GraphQL Code Generator
- ไคลเอนต์ GraphQL ที่ระบุชนิดด้วย Apollo และ urql
- ความปลอดภัยของชนิดตั้งแต่ต้นจนจบ: เวิร์กโฟลว์เริ่มจากสคีมา