ฮุก useQuery และ useMutation
ดึงข้อมูลด้วย useQuery เรียกใช้การกลายข้อมูลด้วย useMutation และจัดการสถานะกำลังโหลด ข้อผิดพลาด และข้อมูล
ฮุก useQuery และ useMutation เป็นบทเรียน React Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน React Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส React Academy มีบทเรียนทั้งหมด 4 บทเรียน
การกำหนดคิวรีด้วย gql
แท็กแม่แบบ gql จาก @apollo/client จะแยกวิเคราะห์สตริงคิวรี GraphQL เป็น DocumentNode ขณะโหลดโมดูล กำหนดคิวรีไว้นอกคอมโพเนนต์: const GET_USERS = gql`query GetUsers { users { id name email } }`
หมายเหตุ: ในโค้ดใช้งานจริง ให้ใช้สตริงที่ครอบด้วยเครื่องหมายอัญประกาศเดี่ยวและห่อด้วย gql ในรูปแม่แบบที่มีแท็ก แท็ก gql รองรับไวยากรณ์ลิเทอรัลแม่แบบในซอร์ส JavaScript
ค่าที่ส่งกลับจาก useQuery
useQuery(GET_USERS) ส่งกลับ { loading, error, data, refetch, fetchMore, networkStatus } โดย loading จะเป็น true ระหว่างการดึงข้อมูลครั้งแรก error จะมีข้อผิดพลาด GraphQL หรือเครือข่ายที่เกิดขึ้น ส่วน data จะมีผลลัพธ์คิวรีที่ตรงกับรูปร่างของคิวรี
ตรวจสอบ loading และ error ก่อนเข้าถึง data เพื่อหลีกเลี่ยงการแสดงค่าที่เป็น null
รูปแบบส่วนติดต่อผู้ใช้สำหรับสถานะกำลังโหลดและข้อผิดพลาด
แสดงคอมโพเนนต์โครงร่างขณะ loading เป็น true แสดงข้อความข้อผิดพลาดหากมีการกำหนด error (เข้าถึง error.message เพื่อใช้เป็นข้อความข้อผิดพลาด) และแสดงเนื้อหาจริงเฉพาะเมื่อมีการกำหนด data และ loading เป็น false
รูปแบบสามสถานะนี้ (loading / error / data) เป็นโครงสร้างมาตรฐานของคอมโพเนนต์ Apollo Client
การเข้าถึงข้อมูลคิวรี
ออบเจ็กต์ data มีโครงสร้างเหมือนกับคิวรี GraphQL สำหรับ query { users { id name } } ให้เข้าถึง data.users ซึ่งเป็นอาร์เรย์ของออบเจ็กต์ {id, name} ประเภทข้อมูล TypeScript จะตรงกันหากใช้ graphql-codegen เพื่อสร้างฮุกที่มีประเภทข้อมูล
หากไม่ใช้การสร้างโค้ด data จะมีประเภทเป็น any แต่เมื่อใช้การสร้างโค้ด useQuery จะส่งกลับข้อมูลที่มีประเภทครบถ้วนโดยอัตโนมัติ
ตัวแปรใน useQuery
ส่งตัวแปรเป็นอาร์กิวเมนต์ตัวที่สอง: useQuery(GET_USER, { variables: { id: userId } }) คิวรีจะทำงานใหม่โดยอัตโนมัติเมื่อ userId เปลี่ยนแปลง เช่นเดียวกับอาร์เรย์การพึ่งพาของ useEffect
Apollo Client จะแคชชุดค่าผสมที่ไม่ซ้ำกันของคิวรีกับตัวแปรแต่ละชุดแยกกัน ดังนั้น GET_USER ที่มี id: "1" และ GET_USER ที่มี id: "2" จะมีรายการแคชแยกจากกัน
การข้ามคิวรี
ส่ง skip: true ในตัวเลือกเพื่อป้องกันไม่ให้คิวรีทำงาน: useQuery(GET_USER, { skip: !userId }) Apollo จะไม่ส่งคำขอเมื่อ skip เป็น true และ loading จะเป็น false ส่วน data จะไม่ได้กำหนดค่า
นี่เทียบเท่ากับคีย์ null ของ SWR และตัวเลือก enabled: false ของ React Query ใน Apollo
การดึงข้อมูลใหม่ด้วยตนเอง
ฟังก์ชัน refetch ที่ส่งกลับโดย useQuery จะทริกเกอร์คำขอเครือข่ายโดยไม่คำนึงถึงนโยบายการดึงข้อมูล ให้เรียก refetch() หลังการกระทำของผู้ใช้ที่อาจเปลี่ยนข้อมูลบนเซิร์ฟเวอร์ เช่น เรียก refetch() หลังส่งแบบฟอร์ม
ส่งตัวแปรใหม่ให้ refetch ได้: refetch({ id: newId }) เพื่อดึงข้อมูลใหม่ด้วยพารามิเตอร์ที่แตกต่างกัน
การติดตามสถานะเครือข่าย
ส่ง notifyOnNetworkStatusChange: true ในตัวเลือกเพื่อรับการอัปเดตเมื่อสถานะเครือข่ายเปลี่ยนแปลง (กำลังดึงข้อมูล กำลังดึงข้อมูลใหม่ การสำรวจเป็นระยะ และอื่น ๆ) ฟิลด์ networkStatus จะมีรหัสตัวเลขจาก enum NetworkStatus
วิธีนี้ช่วยให้แสดงตัวบ่งชี้เล็กน้อยว่า "กำลังรีเฟรช" ขณะกำลังดึงข้อมูลใหม่เบื้องหลังได้ โดยไม่ซ่อนข้อมูลปัจจุบัน
ลายเซ็นของ useMutation
useMutation(CREATE_USER) ส่งกลับ [mutateFunction, { loading, error, data, reset }] ฟังก์ชัน mutate จะถูกเรียกเมื่อผู้ใช้ส่งแบบฟอร์ม และส่งกลับ Promise ที่มี { data, errors }
เรียก mutate({ variables: { name: 'Alice', email: 'alice@example.com' } }) เพื่อส่งข้อมูลเข้าไปยังมิวเทชัน
การเรียกกลับ onCompleted และ onError
ส่ง onCompleted: (data) => navigate('/dashboard') และ onError: (error) => showToast(error.message) ให้กับตัวเลือกของ useMutation การเรียกกลับเหล่านี้จะทำงานหลังจากมิวเทชันเสร็จสมบูรณ์หรือถูกปฏิเสธ
onCompleted จะได้รับข้อมูลผลลัพธ์ของมิวเทชัน ซึ่งมีประโยชน์สำหรับทริกเกอร์การนำทาง แสดงข้อความสำเร็จ หรือรีเซ็ตแบบฟอร์ม
การตอบกลับแบบคาดการณ์ล่วงหน้าใน useMutation
ตัวเลือก optimisticResponse ในการเรียก mutate จะเขียนผลลัพธ์จำลองลงในแคชทันที ก่อนเซิร์ฟเวอร์ตอบกลับ Apollo จะแสดงข้อมูลคาดการณ์ล่วงหน้าทันที แล้วแทนที่ด้วยการตอบกลับจริงจากเซิร์ฟเวอร์เมื่อได้รับ
หากมิวเทชันล้มเหลว Apollo จะย้อนกลับไปยังสถานะแคชก่อนการคาดการณ์ล่วงหน้าโดยอัตโนมัติ ทำให้ส่วนติดต่อผู้ใช้ยังคงสอดคล้องกัน
ตัวเลือก skip ของ useQuery
จะเกิดอะไรขึ้นกับ useQuery เมื่อส่งผ่าน skip: true
สรุปบทเรียน
กำหนดคิวรีด้วยแท็ก gql เรียก useQuery(QUERY, { variables, skip }) และจัดการสถานะ loading/error/data useMutation จะส่งกลับฟังก์ชันทริกเกอร์และออบเจ็กต์สถานะ ให้เรียกใช้พร้อมตัวแปรและจัดการผลลัพธ์ผ่าน onCompleted และ onError การตอบกลับแบบคาดการณ์ล่วงหน้าจะอัปเดตแคชทันที และย้อนกลับโดยอัตโนมัติเมื่อเกิดความล้มเหลว
ตัวเลือก skip และการดึงข้อมูลใหม่ตามตัวแปรช่วยจัดการการโหลดข้อมูลแบบมีเงื่อนไขและแบบกำหนดพารามิเตอร์
คำถามที่พบบ่อย
บทเรียน “ฮุก useQuery และ useMutation” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “ฮุก useQuery และ useMutation” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส React Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส React Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “ฮุก useQuery และ useMutation”
ดึงข้อมูลด้วย useQuery เรียกใช้การกลายข้อมูลด้วย useMutation และจัดการสถานะกำลังโหลด ข้อผิดพลาด และข้อมูล คุณปฏิบัติ React Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน React Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน React Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “ฮุก useQuery และ useMutation” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน React Academy นี้ได้ไหม
ได้ บทเรียน React Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- พื้นฐาน GraphQL สำหรับนักพัฒนา React
- การตั้งค่า Apollo Client ใน React
- ฮุก useQuery และ useMutation
- แคช Apollo: การทำให้เป็นมาตรฐานและการอัปเดต