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

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

ใช้สถานะเชิงคาดการณ์ภายในเครื่อง จัดคิวการกลายข้อมูล และจัดการกรณีสำเร็จหรือไม่สำเร็จอย่างชัดเจน

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

สถานะก่อนการเปลี่ยนแปลงข้อมูล

การอัปเดตแบบคาดการณ์ผลสำเร็จด้วยตนเองเริ่มจากสถานะในเครื่องขององค์ประกอบที่เริ่มต้นด้วยข้อมูลจากเซิร์ฟเวอร์: const [items, setItems] = useState(serverItems) สถานะในเครื่องนี้คือสิ่งที่คุณนำมาแสดงผล และเป็นสิ่งที่คุณจะเปลี่ยนแปลงแบบคาดการณ์ผลสำเร็จ คุณ NOT ควรเปลี่ยนแปลงข้อมูลที่ดึงจากเซิร์ฟเวอร์โดยตรง แต่ควรเก็บสำเนาในเครื่องที่คุณควบคุมได้

ขั้นตอนการอัปเดตแบบคาดการณ์ผลสำเร็จ

เมื่อผู้ใช้เริ่มการเปลี่ยนแปลงข้อมูล (คลิก "เพิ่ม", "ถูกใจ" หรือ "ลบ") ให้ดำเนินการอัปเดตสถานะทันทีก่อนเรียกส่วนติดต่อโปรแกรม: setItems(prev => [...prev, newItem]) ส่วนติดต่อผู้ใช้จะแสดงการเปลี่ยนแปลงทันที หลังจากอัปเดตนี้แล้วเท่านั้นจึงค่อยส่งคำขอเครือข่ายจริง

การบันทึกสถานะก่อนหน้า

ก่อนทำการอัปเดตแบบคาดการณ์ผลสำเร็จ ให้บันทึกสถานะปัจจุบันไว้: const previousItems = items ภาพสถานะนี้คือเป้าหมายสำหรับการย้อนกลับ หากการเรียกส่วนติดต่อโปรแกรมล้มเหลว คุณจะกู้คืนค่านี้ ให้เก็บค่าไว้ในตัวแปร (ไม่ใช่สถานะ) เพราะคุณต้องใช้ค่านี้ตลอดระยะเวลาที่การเปลี่ยนแปลงข้อมูลยังรอดำเนินการเท่านั้น

การเรียกใช้ส่วนติดต่อโปรแกรม

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

การย้อนกลับเมื่อเกิดความล้มเหลว

ในบล็อกดักจับข้อผิดพลาดของการเปลี่ยนแปลงข้อมูล: setItems(previousItems) การดำเนินการนี้จะคืนสถานะกลับไปเป็นสถานะก่อนการอัปเดตแบบคาดการณ์ผลสำเร็จ จากนั้นให้แสดงการแจ้งเตือนข้อผิดพลาด ผู้ใช้เข้าใจว่าความล้มเหลวที่เกิดขึ้นน้อยครั้งเป็นสิ่งที่เกิดขึ้นได้ แต่สิ่งที่ผู้ใช้ยอมรับไม่ได้คือความไม่สอดคล้องที่เกิดขึ้นโดยไม่มีการแจ้งให้ทราบ

การแสดงการแจ้งเตือนข้อผิดพลาดเมื่อเกิดความล้มเหลว

หลังจากย้อนกลับแล้ว ให้แสดงข้อความข้อผิดพลาดว่า "ไม่สามารถบันทึกการเปลี่ยนแปลงได้ โปรดลองอีกครั้ง" พร้อมปุ่มลองใหม่ที่เรียกการเปลี่ยนแปลงข้อมูลเดิมอีกครั้ง วิธีนี้ช่วยให้ผู้ใช้มีทางเลือก การทำงานร่วมกันระหว่างการย้อนกลับ + การแจ้งเตือนข้อผิดพลาด + การลองใหม่ ช่วยจัดการกรณีล้มเหลวได้อย่างเหมาะสมโดยไม่ปิดกั้นส่วนติดต่อผู้ใช้ทั้งหมด

ปัญหารหัสชั่วคราว

เมื่อเพิ่มรายการใหม่แบบคาดการณ์ผลสำเร็จ เซิร์ฟเวอร์ยังไม่ได้กำหนดรหัสจริงให้รายการนั้น ให้สร้างรหัสชั่วคราวสำหรับรายการแบบคาดการณ์ผลสำเร็จ: const tempId = crypto.randomUUID() ใช้รหัสนี้เป็นคีย์ของรายการ หลังจากเซิร์ฟเวอร์ตอบกลับว่าสำเร็จแล้ว ให้แทนที่รหัสชั่วคราวด้วยรหัสจริงที่เซิร์ฟเวอร์กำหนดให้

การปรับรหัสชั่วคราวให้สอดคล้อง

หลังจากการเปลี่ยนแปลงข้อมูลเพื่อสร้างรายการสำเร็จ เซิร์ฟเวอร์จะตอบกลับด้วยรหัสจริง ให้อัปเดตสถานะเพื่อแทนที่รายการชั่วคราว: setItems(prev => prev.map(item => item.id === tempId ? { ...item, id: serverResponse.id } : item)) การปรับให้สอดคล้องนี้ช่วยให้การดำเนินการต่อ ๆ ไปใช้รหัสเซิร์ฟเวอร์ที่ถูกต้อง

ปัญหาภาวะการทำงานแข่งกัน

หากผู้ใช้เริ่มการเปลี่ยนแปลงข้อมูลสองครั้งติดต่อกันอย่างรวดเร็ว การตอบกลับอาจมาถึงไม่เรียงลำดับ การตอบกลับของการเปลี่ยนแปลงข้อมูลครั้งที่สองอาจมาถึงก่อนครั้งแรก และการย้อนกลับของครั้งแรกอาจเขียนทับสถานะที่ถูกต้องจากครั้งที่สอง นี่คือภาวะการทำงานแข่งกันที่เกิดขึ้นเฉพาะกับส่วนติดต่อผู้ใช้แบบคาดการณ์ผลสำเร็จ

การจัดลำดับการเปลี่ยนแปลงข้อมูลเพื่อป้องกันเงื่อนไขการแข่งขัน

วิธีหนึ่งในการแก้เงื่อนไขการแข่งขันคือจัดลำดับการเปลี่ยนแปลงข้อมูลผ่านคิว ขณะที่การเปลี่ยนแปลงข้อมูลกำลังดำเนินการอยู่ ให้ปิดใช้งานปุ่มเริ่มการทำงาน (โดยตั้งค่าสถานะ isSubmitting เป็น true) อนุญาตให้การเปลี่ยนแปลงข้อมูลครั้งถัดไปทำงานได้ก็ต่อเมื่อครั้งก่อนหน้าเสร็จสิ้น วิธีนี้ลดความตอบสนองลงเล็กน้อย แต่รับประกันว่าลำดับของสถานะจะถูกต้อง

รูปแบบการลบเชิงคาดการณ์

สำหรับการดำเนินการลบ ให้เก็บรายการก่อนหน้าไว้ กรองรายการที่ถูกลบออกจากสถานะ เรียก API สำหรับการลบ และย้อนกลับเมื่อไม่สำเร็จ การลบทำได้ง่ายกว่าการสร้าง เพราะไม่ต้องปรับ ID ให้ตรงกัน แต่ใช้หลักการเดียวกันได้ ลองเพิ่มความล่าช้าสั้น ๆ ก่อนการลบ (โดยแสดงตัวเลือก "เลิกทำ") แล้วจึงเรียก API

ID ชั่วคราวในการอัปเดตเชิงคาดการณ์

เหตุใดรายการที่เพิ่มแบบเชิงคาดการณ์จึงต้องมี ID ชั่วคราว

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

รูปแบบแบบทำด้วยตนเองคือ เก็บ previousItems ไว้ ใช้ setItems ตั้งสถานะใหม่ เรียก API และใช้ setItems(previousItems) เพื่อย้อนกลับเมื่อไม่สำเร็จพร้อมแสดงข้อผิดพลาด สำหรับการเพิ่ม ให้ใช้ crypto.randomUUID() เป็น ID ชั่วคราว และปรับให้ตรงกับ ID ของเซิร์ฟเวอร์เมื่อสำเร็จ ป้องกันเงื่อนไขการแข่งขันด้วยการปิดปุ่มเริ่มการทำงานระหว่างการเปลี่ยนแปลงข้อมูลที่กำลังดำเนินการ การย้อนกลับ + การแจ้งเตือนแบบข้อความสั้น + การลองใหม่ คือประสบการณ์ผู้ใช้มาตรฐานเมื่อเกิดข้อผิดพลาด

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

บทเรียน “การสร้างการอัปเดตเชิงคาดการณ์ด้วยตนเอง” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “การสร้างการอัปเดตเชิงคาดการณ์ด้วยตนเอง”

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

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

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

บทเรียน “การสร้างการอัปเดตเชิงคาดการณ์ด้วยตนเอง” ใช้เวลานานแค่ไหน

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

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

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

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

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