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

การตั้งค่า Apollo Client ใน React

กำหนดค่า ApolloProvider สร้างไคลเอนต์ Apollo พร้อมแคชและสายลิงก์ แล้วเชื่อมต่อกับ API GraphQL

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

การติดตั้ง Apollo Client

ติดตั้ง @apollo/client และ graphql โดยแพ็กเกจ graphql เป็นการพึ่งพาร่วมที่ Apollo Client ต้องใช้สำหรับแยกวิเคราะห์เอกสารคิวรีด้วยแท็กแม่แบบ gql

สำหรับโครงการ TypeScript แพ็กเกจทั้งสองมีคำจำกัดความประเภทข้อมูลมาให้ในตัว จึงไม่จำเป็นต้องใช้แพ็กเกจ @types

การสร้างอินสแตนซ์ ApolloClient

สร้างอินสแตนซ์ ApolloClient โดยกำหนดแคชและลิงก์ การตั้งค่าที่ง่ายที่สุดคือ new ApolloClient({ cache: new InMemoryCache(), uri: '/graphql' }) การเขียน uri แบบย่อจะสร้าง HttpLink ภายในให้โดยอัตโนมัติ

หากต้องการควบคุมมากขึ้น ให้สร้างสายลิงก์ด้วยตนเองและส่งให้ตัวเลือก link แทน uri

ApolloProvider

ห่อแอปพลิเคชัน React ของคุณด้วย ApolloProvider โดยใช้พร็อป client: ApolloProvider client={client} วิธีนี้ทำให้อินสแตนซ์ Apollo Client พร้อมใช้งานสำหรับคอมโพเนนต์ลูกหลานทั้งหมดผ่านบริบทของ React

การเรียกใช้ useQuery และ useMutation ทุกครั้งในต้นไม้คอมโพเนนต์จะใช้ไคลเอ็นต์นี้โดยอัตโนมัติ โดยไม่ต้องส่งพร็อปผ่านทุกชั้น

InMemoryCache: การแคชแบบจัดข้อมูลให้เป็นมาตรฐาน

InMemoryCache เป็นแคชเริ่มต้นของ Apollo Client โดยจะจัดข้อมูลที่ดึงมาให้อยู่ในรูปแบบมาตรฐานตามประเภทและ ID และจัดเก็บแต่ละเอนทิตีไว้ภายใต้คีย์แคชที่ไม่ซ้ำกัน (เช่น User:1) เมื่อคิวรีใดดึง User:1 การอ่านเอนทิตีนั้นในครั้งต่อ ๆ ไปทั้งหมดจะได้รับข้อมูลที่อัปเดตแล้ว

การจัดข้อมูลให้เป็นมาตรฐานนี้หมายความว่า เมื่อมิวเทชันหนึ่งอัปเดตผู้ใช้ ผลลัพธ์ของทุกคิวรีที่มีผู้ใช้คนนั้นจะอัปเดตโดยอัตโนมัติ โดยไม่ต้องเขียนโค้ดเพิ่มเติม

HttpLink

HttpLink จัดการการส่งข้อมูลผ่าน HTTP จาก Apollo Client ไปยังเซิร์ฟเวอร์ GraphQL ของคุณ คุณสามารถกำหนดค่า uri และกำหนด fetch, headers และ credentials เพิ่มเติมได้ตามต้องการ

สำหรับกรณีใช้งานขั้นสูง ลิงก์แบบแบ่งจะส่งการดำเนินการแต่ละประเภทไปยังจุดปลายทางที่แตกต่างกัน โดยซับสคริปชันส่งผ่าน WebSocket (WebSocketLink) ส่วนคิวรีและมิวเทชันส่งผ่าน HTTP (HttpLink)

AuthLink ด้วย setContext

นำเข้า setContext จาก @apollo/client/link/context สร้างลิงก์ยืนยันตัวตน: const authLink = setContext((_, { headers }) => ({ headers: { ...headers, authorization: 'Bearer ' + getToken() } })) จากนั้นเชื่อมต่อไว้ก่อน HttpLink: authLink.concat(httpLink)

ลิงก์ setContext จะทำงานก่อนคำขอแต่ละรายการ โดยเพิ่มส่วนหัวการยืนยันตัวตนให้กับการดำเนินการทุกครั้งแบบไดนามิก

การประกอบสายลิงก์

ประกอบลิงก์โดยใช้ ApolloLink.from([authLink, errorLink, httpLink]) หรือ authLink.concat(httpLink) ลิงก์ทำหน้าที่เป็นมิดเดิลแวร์ โดยแต่ละลิงก์จะประมวลผลการดำเนินการและส่งต่อไปยัง next() ลิงก์สุดท้ายในสายจะส่งคำขอ HTTP จริง

สายลิงก์ที่พบบ่อย ได้แก่ ลิงก์ยืนยันตัวตน (เพิ่มส่วนหัว) + ลิงก์ข้อผิดพลาด (จัดการข้อผิดพลาด) + ลิงก์ HTTP (ส่งคำขอ)

ข้อผิดพลาดของ Apollo Link

นำเข้า onError จาก @apollo/client/link/error ลิงก์ข้อผิดพลาดจะสกัดกั้นข้อผิดพลาด GraphQL และข้อผิดพลาดเครือข่ายทั่วทั้งระบบ ใช้ลิงก์นี้เพื่อเปลี่ยนเส้นทางไปยังหน้าเข้าสู่ระบบเมื่อเกิดข้อผิดพลาด UNAUTHENTICATED หรือแสดงการแจ้งเตือนข้อผิดพลาดทั่วระบบเมื่อเครือข่ายขัดข้อง

ต้องวางลิงก์ข้อผิดพลาดไว้ก่อนลิงก์ HTTP ในสาย แต่สามารถเรียก forward(operation) เพื่อส่งคำขออีกครั้งได้

ตัวเลือกนโยบายการดึงข้อมูล

cache-first (ค่าเริ่มต้น): ส่งคืนข้อมูลจากแคชทันที และดึงข้อมูลใหม่เบื้องหลังหากข้อมูลเก่า network-only: ดึงข้อมูลจากเซิร์ฟเวอร์เสมอและอัปเดตแคช cache-and-network: ส่งคืนข้อมูลจากแคชทันทีและดึงข้อมูลใหม่ จากนั้นอัปเดตส่วนติดต่อผู้ใช้เมื่อได้รับการตอบกลับ cache-only: อ่านจากแคชเท่านั้น และแสดงข้อผิดพลาดหากไม่มีข้อมูลในแคช no-cache: ดึงข้อมูลใหม่เสมอและไม่เขียนลงแคช

ให้เลือกตามข้อกำหนดด้านความใหม่ของข้อมูล โดยแดชบอร์ดมักใช้ cache-and-network ส่วนแบบฟอร์มโปรไฟล์ผู้ใช้มักใช้ network-only

การตั้งค่านโยบายการดึงข้อมูลเริ่มต้นทั่วทั้งระบบ

กำหนด fetchPolicy เริ่มต้นใน defaultOptions ของ InMemoryCache: new ApolloClient({ defaultOptions: { watchQuery: { fetchPolicy: 'cache-and-network' } } }) การเรียกใช้ useQuery แต่ละรายการสามารถแทนที่ค่านี้สำหรับคิวรีนั้นได้

การตั้งค่าเริ่มต้นทั่วทั้งระบบที่เหมาะสมช่วยลดโค้ดซ้ำจากการต้องระบุ fetchPolicy ในการเรียกใช้ฮุกทุกครั้ง

Apollo Client DevTools

ส่วนขยายเบราว์เซอร์ Apollo Client DevTools จะเพิ่มแผง Apollo ลงใน Chrome DevTools โดยแสดงคิวรีที่แคชไว้ทั้งหมดพร้อมข้อมูลปัจจุบัน เปิดให้สำรวจแคชแบบจัดข้อมูลให้เป็นมาตรฐาน และเรียกใช้คิวรีซ้ำจากแผง DevTools ได้

ติดตั้งจาก Chrome Web Store และเริ่มต้นไคลเอ็นต์ด้วย devtools: { enabled: true } (เป็นค่าเริ่มต้นในโหมดพัฒนา)

การประกอบสายลิงก์ของ Apollo

ในสายลิงก์ของ Apollo Client ควรวาง errorLink ไว้ตรงไหนเมื่อเทียบกับ httpLink

สรุปบทเรียน

ติดตั้ง @apollo/client และ graphql สร้าง ApolloClient พร้อม InMemoryCache และสายลิงก์ แล้วห่อแอปด้วย ApolloProvider สายลิงก์ประกอบด้วย authLink (เพิ่มโทเค็น), errorLink (จัดการข้อผิดพลาดทั่วทั้งระบบ) และ httpLink (การส่งข้อมูลผ่าน HTTP) นโยบายการดึงข้อมูลจะควบคุมลำดับความสำคัญระหว่างแคชกับเครือข่าย ส่วน InMemoryCache จะจัดเอนทิตีให้อยู่ในรูปแบบมาตรฐานตามประเภทและ ID

ส่วนขยายเบราว์เซอร์ Apollo DevTools ช่วยให้ตรวจสอบแคชและแก้ไขข้อบกพร่องได้อย่างสะดวก

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

บทเรียน “การตั้งค่า Apollo Client ใน React” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “การตั้งค่า Apollo Client ใน React”

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

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

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

บทเรียน “การตั้งค่า Apollo Client ใน React” ใช้เวลานานแค่ไหน

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

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

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

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

  1. พื้นฐาน GraphQL สำหรับนักพัฒนา React
  2. การตั้งค่า Apollo Client ใน React
  3. ฮุก useQuery และ useMutation
  4. แคช Apollo: การทำให้เป็นมาตรฐานและการอัปเดต
← กลับไปที่ React Academy