แนวคิดหลักของ SWR: เก่าแต่ตรวจสอบใหม่
ทำความเข้าใจกลยุทธ์แคชของ SWR: แสดงข้อมูลเก่าทันที ตรวจสอบใหม่เบื้องหลัง และอัปเดตเมื่อได้ข้อมูลล่าสุด
แนวคิดหลักของ SWR: เก่าแต่ตรวจสอบใหม่ เป็นบทเรียน React Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน React Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส React Academy มีบทเรียนทั้งหมด 4 บทเรียน
SWR ย่อมาจากอะไร
SWR ย่อมาจาก Stale-While-Revalidate ซึ่งเป็นกลยุทธ์แคช HTTP ที่กำหนดไว้ใน RFC 5861 กลยุทธ์นี้คือให้ส่งข้อมูลเก่าที่แคชไว้ให้ผู้ใช้ทันที จากนั้นตรวจสอบข้อมูลใหม่เบื้องหลัง และอัปเดตส่วนติดต่อผู้ใช้เมื่อข้อมูลล่าสุดมาถึง
แนวทางนี้ให้ความสำคัญกับประสิทธิภาพที่ผู้ใช้รับรู้ ผู้ใช้จึงเห็นข้อมูลได้ทันทีแทนที่จะต้องรอการรับส่งข้อมูลไปกลับผ่านเครือข่าย
ประโยชน์ต่อประสบการณ์ผู้ใช้
ในรูปแบบการโหลดแบบดั้งเดิม ผู้ใช้จะเห็นวงแหวนแสดงการโหลดทุกครั้งที่เปลี่ยนหน้า แต่เมื่อใช้ SWR ผู้ใช้จะเห็นข้อมูลล่าสุดที่ทราบทันที และส่วนติดต่อผู้ใช้จะอัปเดตอย่างเงียบ ๆ เบื้องหลังหากข้อมูลเปลี่ยนแปลง
ทำให้แอปพลิเคชันรู้สึกเร็วขึ้นอย่างเห็นได้ชัด และลดการรบกวนทางความคิดจากสถานะการโหลด
เมื่อ SWR เริ่มตรวจสอบข้อมูลใหม่
SWR จะตรวจสอบข้อมูลใหม่โดยอัตโนมัติเมื่อ: หน้าต่างเบราว์เซอร์กลับมาอยู่ในโฟกัส (ผู้ใช้สลับแท็บแล้วกลับมา) การเชื่อมต่อเครือข่ายกลับมาใช้งานได้หลังออฟไลน์ มีการเรียกใช้ mutate() อย่างชัดเจน หรือเวลาของตัวจับ refreshInterval ที่กำหนดค่าได้หมดลง
ตัวกระตุ้นอัตโนมัติเหล่านี้ช่วยให้ข้อมูลเป็นปัจจุบันโดยไม่ต้องให้นักพัฒนาจัดการตรรกะการดึงข้อมูลใหม่ด้วยตนเอง
เครื่องสถานะของ SWR
คีย์ของ SWR สามารถอยู่ในสถานะใดสถานะหนึ่งจากหลายสถานะ ได้แก่ กำลังโหลด (ยังไม่มีข้อมูลแคชและกำลังดึงข้อมูลครั้งแรก) กำลังตรวจสอบข้อมูลใหม่ (มีข้อมูลแคชและกำลังรีเฟรชเบื้องหลัง) เกิดข้อผิดพลาด (คำขอล้มเหลว) หรือสำเร็จ (มีข้อมูลล่าสุดพร้อมใช้งาน)
การเข้าใจสถานะเหล่านี้ช่วยให้คุณสร้างโครงร่างขณะโหลดและส่วนติดต่อผู้ใช้สำหรับข้อผิดพลาดได้อย่างถูกต้อง
แคช SWR ส่วนกลาง
SWR จะรักษาแคชในหน่วยความจำส่วนกลาง โดยใช้คีย์คำขอเป็นคีย์ของแคช (โดยทั่วไปคือสตริง URL) คอมโพเนนต์ใดก็ตามที่ขอคีย์เดียวกันจะได้รับค่าที่แคชไว้เดียวกันและมีส่วนร่วมในรอบการตรวจสอบข้อมูลใหม่เดียวกัน
การขจัดคำขอซ้ำโดยอัตโนมัตินี้หมายความว่าคอมโพเนนต์ 10 รายการสามารถเรียกใช้ useSWR ด้วยคีย์เดียวกันได้ และจะมีคำขอเครือข่ายเพียงรายการเดียวเท่านั้น
ฟังก์ชันดึงข้อมูล
SWR แยกตรรกะการจัดการแคชออกจากการดึงข้อมูลจริง คุณจะระบุฟังก์ชันดึงข้อมูล ซึ่งเป็นฟังก์ชัน async ที่รับคีย์และส่งคืนข้อมูล
ฟังก์ชันดึงข้อมูลนี้สามารถสลับเปลี่ยนได้ คุณสามารถใช้ fetch, axios, graphql-request หรือแหล่งข้อมูล async ใดก็ได้ SWR จะจัดการการแคชและการตรวจสอบข้อมูลใหม่โดยไม่ขึ้นอยู่กับวิธีการทำงานของฟังก์ชันดึงข้อมูล
การกำหนดค่าฟังก์ชันดึงข้อมูลส่วนกลาง
ครอบแอปของคุณด้วย SWRConfig โดยให้พร็อพเพอร์ตี value มีฟังก์ชันดึงข้อมูล: value={{ fetcher: (url) => fetch(url).then(r => r.json()) }} การเรียกใช้ useSWR ทุกครั้งที่ไม่ระบุอาร์กิวเมนต์ฟังก์ชันดึงข้อมูลจะใช้ค่าเริ่มต้นส่วนกลางนี้
การทำเช่นนี้รวมการตั้งค่า API (URL พื้นฐานและส่วนหัวการยืนยันตัวตน) ไว้ในที่เดียว โดยไม่ต้องเขียนซ้ำในการเรียกใช้ฮุกแต่ละครั้ง
SWR เทียบกับการดึงข้อมูลแบบดั้งเดิม
รูปแบบดั้งเดิมใช้ useEffect + useState เพื่อจัดการสถานะการโหลด ข้อมูล และข้อผิดพลาดด้วยตนเอง SWR แทนที่ทั้งหมดด้วยการเรียกใช้ฮุกเพียงครั้งเดียว ซึ่งจัดการการแคช การขจัดคำขอซ้ำ การรีเฟรชเบื้องหลัง และการลองส่งคำขอใหม่เมื่อเกิดข้อผิดพลาดโดยอัตโนมัติ
ปริมาณโค้ดที่ลดลงมีมาก คอมโพเนนต์ดึงข้อมูลทั่วไปลดจากมากกว่า 20 บรรทัดเหลือเพียง 3 บรรทัด
การออกแบบคีย์แคช
คีย์จะระบุคำขอหนึ่งรายการโดยไม่ซ้ำกัน ใช้สตริง URL ในกรณีง่าย ๆ สำหรับคำขอที่มีพารามิเตอร์ ให้ใช้คีย์แบบอาร์เรย์: [url, params] โดย params ต้องเป็นออบเจ็กต์หรือสตริงที่คงที่ ส่วน null จะปิดใช้งานคำขอ
การออกแบบคีย์ที่ดีช่วยให้คำขอที่เกี่ยวข้องใช้รายการแคชร่วมกัน และป้องกันไม่ให้คำขอที่ไม่เกี่ยวข้องใช้คีย์ชนกัน
การตรวจสอบข้อมูลใหม่และภาระเครือข่าย
SWR จัดการการตรวจสอบข้อมูลใหม่อย่างชาญฉลาด โดย dedupingInterval (ค่าเริ่มต้น 2 วินาที) จะป้องกันไม่ให้มีการตรวจสอบข้อมูลใหม่หลายครั้งเริ่มทำงานพร้อมกันเมื่อมีคอมโพเนนต์จำนวนมากถูกเมานต์ในเวลาเดียวกัน ภายในช่วงเวลาขจัดคำขอซ้ำ จะมีคำขอเพียงรายการเดียวต่อคีย์
วิธีนี้ป้องกันปัญหาคำขอถล่มพร้อมกัน ซึ่งมักเกิดในโครงสร้างต้นไม้ของคอมโพเนนต์ขนาดใหญ่ที่คอมโพเนนต์จำนวนมากดึงข้อมูลเดียวกัน
SWR ในบริบทของ Next.js
SWR สร้างโดย Vercel บริษัทผู้อยู่เบื้องหลัง Next.js และการผสานรวมก็ทำได้อย่างราบรื่น getServerSideProps หรือ getStaticProps สามารถดึงข้อมูลล่วงหน้าได้ และ SWR จะเติมข้อมูลเริ่มต้นจากค่าที่ดึงล่วงหน้านั้นบนไคลเอ็นต์
ทำให้คุณได้ HTML เริ่มต้นที่เรนเดอร์จากเซิร์ฟเวอร์ พร้อมการตรวจสอบข้อมูลใหม่ฝั่งไคลเอ็นต์โดยอัตโนมัติเมื่อเมานต์ ซึ่งรวมข้อดีของ SSR และ SWR ไว้ด้วยกัน
เมื่อ SWR ตรวจสอบข้อมูลใหม่
ข้อใดต่อไปนี้เป็นสิ่งที่ NOT ทำให้ SWR ตรวจสอบข้อมูลใหม่ตามค่าเริ่มต้น
ทบทวนบทเรียน
SWR ใช้กลยุทธ์ Stale-While-Revalidate โดยส่งข้อมูลที่แคชไว้ให้ทันที ตรวจสอบข้อมูลใหม่เบื้องหลัง และอัปเดตส่วนติดต่อผู้ใช้เมื่อข้อมูลล่าสุดมาถึง โดยจะเริ่มตรวจสอบข้อมูลใหม่เมื่อกลับมาโฟกัส เชื่อมต่อเครือข่ายอีกครั้ง เรียกใช้ mutate และดึงข้อมูลเป็นระยะ แคชส่วนกลางจะขจัดคำขอซ้ำระหว่างคอมโพเนนต์ และฟังก์ชันดึงข้อมูลสามารถสลับเปลี่ยนได้อย่างสมบูรณ์
โมเดลนี้ช่วยลดความซับซ้อนของโค้ดดึงข้อมูลลงอย่างมาก พร้อมทำให้ผู้ใช้รับรู้ว่าแอปทำงานเร็วขึ้น
คำถามที่พบบ่อย
บทเรียน “แนวคิดหลักของ SWR: เก่าแต่ตรวจสอบใหม่” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “แนวคิดหลักของ SWR: เก่าแต่ตรวจสอบใหม่” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส React Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส React Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “แนวคิดหลักของ SWR: เก่าแต่ตรวจสอบใหม่”
ทำความเข้าใจกลยุทธ์แคชของ SWR: แสดงข้อมูลเก่าทันที ตรวจสอบใหม่เบื้องหลัง และอัปเดตเมื่อได้ข้อมูลล่าสุด คุณปฏิบัติ React Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน React Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน React Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “แนวคิดหลักของ SWR: เก่าแต่ตรวจสอบใหม่” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน React Academy นี้ได้ไหม
ได้ บทเรียน React Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- แนวคิดหลักของ SWR: เก่าแต่ตรวจสอบใหม่
- ฮุก useSWR: การดึงข้อมูล การโหลด และสถานะข้อผิดพลาด
- การกลายข้อมูลและการอัปเดตเชิงคาดการณ์ด้วย SWR
- SWR เทียบกับ React Query: การเลือกเครื่องมือที่เหมาะสม