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

รูปแบบเชิงคาดการณ์ด้วย React Query และ Zustand

ใช้คอลแบ็ก onMutate/onError/onSettled ของ React Query และ Zustand เพื่อสร้างเวิร์กโฟลว์ UI เชิงคาดการณ์อย่างเป็นระบบ

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

ภาพรวม React Query useMutation

ฮุก useMutation ของ React Query มีโครงสร้างในตัวสำหรับการอัปเดตเชิงคาดการณ์ผ่านฟังก์ชันเรียกกลับตามวงจรการทำงานสามรายการ ได้แก่ onMutate (ทำงานก่อนการเปลี่ยนแปลงข้อมูลและส่งคืนออบเจ็กต์บริบท) onError (ทำงานเมื่อไม่สำเร็จและรับบริบทนั้น) และ onSettled (ทำงานเมื่อสำเร็จหรือไม่สำเร็จ) โครงสร้างนี้ออกแบบมาโดยเฉพาะสำหรับรูปแบบเชิงคาดการณ์

onMutate: ขั้นตอนการอัปเดตเชิงคาดการณ์

ใน onMutate ให้ดำเนินการสามขั้นตอน ขั้นแรก ยกเลิกคำขอข้อมูลที่กำลังดำเนินการสำหรับข้อมูลที่ได้รับผลกระทบ (await queryClient.cancelQueries({ queryKey })) จากนั้นเก็บสำเนาแคชปัจจุบัน (queryClient.getQueryData(queryKey)) และสุดท้ายใช้การอัปเดตเชิงคาดการณ์กับแคช (queryClient.setQueryData(queryKey, updater)) ส่งคืนสำเนานั้นเป็นบริบท

onError: การย้อนกลับด้วยบริบท

ฟังก์ชันเรียกกลับ onError จะได้รับข้อผิดพลาด ตัวแปรของการเปลี่ยนแปลงข้อมูล และบริบทที่ส่งคืนจาก onMutate ใช้บริบทเพื่อย้อนกลับ: queryClient.setQueryData(queryKey, context.previousData) บริบทนี้เป็นตัวเชื่อมระหว่างสำเนาที่เก็บไว้ใน onMutate กับการย้อนกลับใน onError

onSettled: การดึงข้อมูลใหม่เพื่อให้สอดคล้องกัน

ฟังก์ชันเรียกกลับ onSettled ทำงานไม่ว่าจะสำเร็จหรือไม่สำเร็จ ใช้ฟังก์ชันนี้เพื่อดึงคำขอข้อมูลใหม่และทำให้สอดคล้องกับสถานะของเซิร์ฟเวอร์: queryClient.invalidateQueries({ queryKey }) วิธีนี้รับประกันว่าหลังการเปลี่ยนแปลงข้อมูลทุกครั้ง ไม่ว่าจะสำเร็จ (เซิร์ฟเวอร์อาจปรับข้อมูล) หรือไม่สำเร็จ (การย้อนกลับเสร็จสมบูรณ์) ในที่สุดสถานะของคุณจะสอดคล้องกับข้อมูลจริงจากเซิร์ฟเวอร์

การสลับรายการสิ่งที่ต้องทำแบบเชิงคาดการณ์ด้วย React Query

ตัวอย่างการใช้งานจริงคือการสลับสถานะเสร็จสิ้นของรายการสิ่งที่ต้องทำ ใน onMutate ให้เก็บสำเนารายการสิ่งที่ต้องทำ แล้วอัปเดตรายการที่ระบุในแคช ใน onError ให้กู้คืนสำเนาจากบริบท ใน onSettled ให้ทำให้คำขอข้อมูลรายการสิ่งที่ต้องทำหมดอายุเพื่อดึงข้อมูลใหม่ ผู้ใช้จะเห็นการสลับสถานะทันที ส่วนเซิร์ฟเวอร์จะซิงค์ข้อมูลอยู่เบื้องหลัง

การอัปเดตเชิงคาดการณ์ด้วย Zustand

ในคลังสถานะ Zustand การอัปเดตเชิงคาดการณ์ทำได้ตรงไปตรงมา โดยสร้างการกระทำ updateItem(id, changes) ที่อัปเดตรายการในคลังสถานะทันที แล้วจึงเรียก API หาก API ไม่สำเร็จ ให้เรียกการกระทำอีกอย่างคือ revertItem(id, previousState) การอัปเดตสถานะแบบเกิดขึ้นทันทีของ Zustand ทำให้ขั้นตอนเชิงคาดการณ์แสดงผลได้ทันที

การใช้ Immer ร่วมกับ Zustand สำหรับการอัปเดตที่ซับซ้อน

เมื่ออัปเดตสถานะ Zustand ที่ซ้อนกันหลายระดับแบบเชิงคาดการณ์ ให้ใช้ produce ของ Immer เพื่อเขียนการเปลี่ยนแปลงอย่างเป็นระเบียบ: set(produce(state => { state.items[id] = { ...state.items[id], ...changes } })) Immer จัดการการอัปเดตแบบไม่เปลี่ยนแปลงค่าเดิมโดยใช้ไวยากรณ์ที่แก้ไขค่าได้ ทำให้การเปลี่ยนแปลงสถานะที่ซ้อนกันซับซ้อนอ่านง่ายและปลอดภัย

ฮุก useOptimistic ของ React 19

React 19 เพิ่ม useOptimistic(state, updateFn) ซึ่งเป็นฮุกในตัวสำหรับการอัปเดตเชิงคาดการณ์ภายในการทำงานฝั่งเซิร์ฟเวอร์ const [optimisticState, addOptimistic] = useOptimistic(items, (state, newItem) => [...state, newItem]) การเรียก addOptimistic(newItem) จะอัปเดตส่วนติดต่อผู้ใช้ทันที ขณะที่การทำงานฝั่งเซิร์ฟเวอร์ดำเนินการแบบไม่พร้อมกัน

useOptimistic กับการย้อนกลับอัตโนมัติ

useOptimistic จัดการการย้อนกลับโดยอัตโนมัติ เมื่อการทำงานฝั่งเซิร์ฟเวอร์เสร็จสิ้น ไม่ว่าจะสำเร็จหรือเกิดข้อผิดพลาด React จะคืนสถานะเชิงคาดการณ์และใช้สถานะจริงจากเซิร์ฟเวอร์ คุณไม่จำเป็นต้องเขียนตรรกะการย้อนกลับด้วยตนเอง เพราะ React จัดการวงจรการทำงานของการอัปเดตเชิงคาดการณ์ระหว่างขอบเขต Suspense ของการทำงานนั้น

เปรียบเทียบแนวทางทั้งสาม

การอัปเดตเชิงคาดการณ์แบบทำด้วยตนเองให้การควบคุมเต็มที่ แต่ต้องเขียนโค้ดประกอบจำนวนมาก React Query ใช้ onMutate/onError/onSettled ร่วมกับแคชคำขอข้อมูลเพื่อซิงค์โดยอัตโนมัติ useOptimistic เป็นวิธีที่ง่ายที่สุดสำหรับการทำงานฝั่งเซิร์ฟเวอร์ แต่ต้องใช้ React 19 และสถาปัตยกรรมการทำงานฝั่งเซิร์ฟเวอร์ ให้เลือกตามชั้นข้อมูลของคุณ: แบบทำด้วยตนเองสำหรับสถานะในเครื่องที่เรียบง่าย React Query สำหรับ REST API และ useOptimistic สำหรับ RSC/การทำงานฝั่งเซิร์ฟเวอร์

การเลือกใช้รูปแบบที่เหมาะสม

พิจารณาสถาปัตยกรรมของคุณเมื่อเลือกรูปแบบเชิงคาดการณ์ หากคุณใช้ React Query ทั่วทั้งแอป รูปแบบ onMutate จะสอดคล้องกันและคำนึงถึงแคช หากใช้ Zustand สำหรับสถานะส่วนกลาง รูปแบบที่อาศัยการกระทำจะเข้ากันได้อย่างเป็นธรรมชาติ หากใช้ React 19 ร่วมกับการทำงานฝั่งเซิร์ฟเวอร์ useOptimistic คือตัวเลือกที่เหมาะสมตามแนวทางของ React การผสมรูปแบบต่าง ๆ ภายในแอปเดียวเป็นเรื่องปกติและยอมรับได้

<p>ฟังก์ชันเรียกกลับ <code>onMutate</code> ใน React Query ควรส่งคืนอะไร เพื่อให้สามารถย้อนกลับใน <code>onError</code> ได้</p>

ฟังก์ชันเรียกกลับ onMutate ในรีแอ็กต์ คิวรีควรส่งค่าใดกลับมาเพื่อเปิดใช้งานการย้อนกลับใน onError?

สรุปบทเรียน: รูปแบบการอัปเดตเชิงคาดการณ์

React Query useMutation ใช้ onMutate (ยกเลิกคำขอข้อมูล เก็บสำเนา ใช้การอัปเดตเชิงคาดการณ์ และส่งคืนบริบท) onError (กู้คืนสำเนาจากบริบท) และ onSettled (ทำให้ข้อมูลหมดอายุเพื่อดึงข้อมูลใหม่) การอัปเดตเชิงคาดการณ์ของ Zustand จะเรียกการกระทำเปลี่ยนสถานะทันทีแล้วจึงเรียก API และย้อนกลับเมื่อไม่สำเร็จ React 19 useOptimistic มีการย้อนกลับอัตโนมัติภายในการทำงานฝั่งเซิร์ฟเวอร์ เลือกรูปแบบที่เหมาะกับสถาปัตยกรรมชั้นข้อมูลของคุณ

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

บทเรียน “รูปแบบเชิงคาดการณ์ด้วย React Query และ Zustand” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “รูปแบบเชิงคาดการณ์ด้วย React Query และ Zustand”

ใช้คอลแบ็ก onMutate/onError/onSettled ของ React Query และ Zustand เพื่อสร้างเวิร์กโฟลว์ UI เชิงคาดการณ์อย่างเป็นระบบ คุณปฏิบัติ React Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

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

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

บทเรียน “รูปแบบเชิงคาดการณ์ด้วย React Query และ Zustand” ใช้เวลานานแค่ไหน

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

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

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

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

  1. UI เชิงคาดการณ์คืออะไรและควรใช้เมื่อใด
  2. การสร้างการอัปเดตเชิงคาดการณ์ด้วยตนเอง
  3. การย้อนกลับเมื่อเกิดข้อผิดพลาดและการแก้ไขข้อขัดแย้ง
  4. รูปแบบเชิงคาดการณ์ด้วย React Query และ Zustand
← กลับไปที่ React Academy