React Academy · บทเรียน

การกลายข้อมูลและการอัปเดตเชิงคาดการณ์ด้วย SWR

ใช้ mutate() และ useSWRMutation สำหรับการเขียนข้อมูลด้วย UI เชิงคาดการณ์และการย้อนกลับอัตโนมัติ

บทเรียน 3 จาก 413 ขั้นตอน

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

mutate: ตรวจสอบข้อมูลใหม่ตามคีย์

ฟังก์ชัน mutate ส่วนกลางจาก swr ช่วยให้คุณเรียกการตรวจสอบข้อมูลใหม่สำหรับคีย์แคชใดก็ได้จากทุกที่ในแอปพลิเคชัน mutate('/api/user') จะทำให้ฮุก useSWR('/api/user') ทั้งหมดดึงข้อมูลใหม่

นำเข้าด้วย: import { mutate } from 'swr' วิธีนี้มีประโยชน์สำหรับทำให้ข้อมูลเป็นโมฆะหลังการดำเนินการบนเซิร์ฟเวอร์ที่เกิดขึ้นนอกคอมโพเนนต์ ซึ่งไม่มีสิทธิ์เข้าถึง mutate ที่ผูกไว้โดยตรง

mutate พร้อมข้อมูล: อัปเดตแคชโดยไม่ดึงข้อมูลใหม่

ส่งข้อมูลเป็นอาร์กิวเมนต์ที่สองให้ mutate: mutate('/api/user', updatedUser) จะตั้งค่าแคชเป็น updatedUser ทันทีโดยไม่ส่งคำขอเครือข่าย วิธีนี้บางครั้งเรียกว่าการกลายพันธุ์ภายในเครื่อง

เพิ่ม { revalidate: false } เป็นอาร์กิวเมนต์ที่สามเพื่อป้องกันไม่ให้ SWR ดึงข้อมูลใหม่หลังการอัปเดตเชิงคาดการณ์

useSWRMutation: สำหรับการเรียกใช้ที่ชัดเจน

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

นำเข้าจาก swr/mutation: const { trigger, isMutating, data, error } = useSWRMutation('/api/post', sendRequest)

รูปแบบอาร์กิวเมนต์ของ fetcher สำหรับ useSWRMutation

fetcher สำหรับ useSWRMutation จะรับ (key, { arg }) โดย arg คือค่าที่ส่งให้ trigger() ตัวอย่าง: async (url, { arg: newPost }) => fetch(url, { method: 'POST', body: JSON.stringify(newPost) })

เรียกใช้ trigger({ title: 'New Post', content: '...' }) เพื่อเริ่มการกลายพันธุ์โดยส่งข้อมูลโพสต์เป็น arg

สถานะ isMutating

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

วิธีนี้ใช้แทนตัวแปรสถานะ isSubmitting ที่คุณอาจต้องจัดการด้วย useState ด้วยตนเอง

อธิบายการอัปเดตแบบมองโลกในแง่ดี

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

รูปแบบนี้ทำให้ส่วนติดต่อผู้ใช้ตอบสนองได้ทันที ปุ่มถูกใจจะแสดงเป็นสถานะถูกกดทันทีโดยไม่ต้องรอการตอบกลับจาก POST

การอัปเดตแบบมองโลกในแง่ดีด้วย SWR

ใช้ mutate(key, newData, { optimisticData: optimisticValue, rollbackOnError: true }) โดย SWR จะตั้งค่าแคชเป็น optimisticValue ทันที ส่งคำขอตรวจสอบข้อมูลใหม่ และย้อนกลับไปใช้ค่าก่อนหน้าหากคำขอนั้นเกิดข้อผิดพลาด

ตัวเลือก rollbackOnError: true จำเป็นอย่างยิ่งต่อความถูกต้อง หากไม่มีตัวเลือกนี้ การเปลี่ยนแปลงข้อมูลที่ล้มเหลวจะทิ้งข้อมูลแบบมองโลกในแง่ดีที่ล้าสมัยไว้ในแคช

ย้อนกลับอัตโนมัติเมื่อเกิดข้อผิดพลาด

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

นอกจากนี้ ให้กำหนด populateCache: false หากเนื้อหาการตอบกลับจากการเปลี่ยนแปลงข้อมูลมีรูปแบบไม่ตรงกับรูปแบบข้อมูลของ useSWR เพื่อป้องกันไม่ให้การตอบกลับอัปเดตแคชอย่างไม่ถูกต้อง

mutate แบบผูกกับคีย์เทียบกับ mutate ส่วนกลาง

useSWR คืนค่า mutate ที่ผูกกับคีย์ดังนี้: const { data, mutate } = useSWR('/api/user', fetcher) mutate ที่ผูกกับคีย์นี้จะกำหนดเป้าหมายเป็นคีย์ '/api/user' โดยอัตโนมัติ คุณจึงไม่ต้องส่งคีย์ซ้ำ

ใช้ mutate แบบผูกกับคีย์ภายในคอมโพเนนต์ที่รับผิดชอบการแสดงข้อมูล ใช้ mutate ส่วนกลางจาก swr เมื่อต้องการทำให้คีย์ไม่ถูกต้องจากคอมโพเนนต์อื่นที่ไม่เกี่ยวข้องหรือจากฟังก์ชันยูทิลิตี

เปรียบเทียบกับการเปลี่ยนแปลงข้อมูลของ React Query

useMutation ของ React Query มีรูปแบบ trigger/isMutating ที่คล้ายกัน ความแตกต่างสำคัญคือ รูปแบบมาตรฐานของ React Query สำหรับทำให้แคชไม่ถูกต้องคือการใช้การเรียกกลับ onSuccess ร่วมกับ queryClient.invalidateQueries ส่วน SWR ใช้ฟังก์ชัน mutate โดยตรงเพื่ออัปเดตแคช

ทั้งสองระบบรองรับการอัปเดตแบบมองโลกในแง่ดีและการย้อนกลับ แต่รูปแบบ API แตกต่างกัน ทีมที่เชี่ยวชาญระบบใดระบบหนึ่งจะเรียนรู้อีกระบบได้อย่างรวดเร็ว

กลยุทธ์แคชหลังการเปลี่ยนแปลงข้อมูล

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

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

การย้อนกลับการอัปเดตแบบมองโลกในแง่ดี

คุณต้องกำหนดตัวเลือกใดใน mutate ของ SWR เพื่อย้อนการอัปเดตแบบมองโลกในแง่ดีกลับโดยอัตโนมัติเมื่อเกิดข้อผิดพลาด

สรุปบทเรียน

Global mutate(key) จะเรียกใช้การตรวจสอบข้อมูลใหม่ ส่วน mutate(key, data) จะอัปเดตแคชโดยไม่ดึงข้อมูลใหม่ useSWRMutation จัดการการเปลี่ยนแปลงข้อมูลที่ผู้ใช้เรียกใช้โดยชัดเจนผ่าน trigger() สถานะ isMutating และการรองรับ extraArg การอัปเดตแบบมองโลกในแง่ดีด้วย optimisticData และ rollbackOnError: true ทำให้ส่วนติดต่อผู้ใช้ตอบสนองได้ทันที พร้อมกู้คืนโดยอัตโนมัติเมื่อเกิดข้อผิดพลาด

mutate แบบผูกกับคีย์จาก useSWR จะกำหนดเป้าหมายเป็นคีย์ของตัวเอง ส่วน mutate ส่วนกลางจาก swr สามารถใช้งานได้จากทุกที่

เริ่มต้นได้ฟรี

เรียนรู้ React ด้วย AI tutor — ฟรี

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

คอร์ส
88
บทเรียน
324

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

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

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

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

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

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

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

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

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

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

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

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

  1. แนวคิดหลักของ SWR: เก่าแต่ตรวจสอบใหม่
  2. ฮุก useSWR: การดึงข้อมูล การโหลด และสถานะข้อผิดพลาด
  3. การกลายข้อมูลและการอัปเดตเชิงคาดการณ์ด้วย SWR
  4. SWR เทียบกับ React Query: การเลือกเครื่องมือที่เหมาะสม
← กลับไปที่ React Academy