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

ฮุก useSWR: การดึงข้อมูล การโหลด และสถานะข้อผิดพลาด

ใช้ useSWR กับฟังก์ชันดึงข้อมูลกำหนดเอง และจัดการสถานะกำลังโหลด ข้อผิดพลาด และสำเร็จแบบประกาศ

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

รูปแบบการเรียกใช้ useSWR

useSWR(key, fetcher, options) คือฮุกหลัก โดย key คือคีย์แคช (โดยทั่วไปเป็นสตริง URL) fetcher คือฟังก์ชัน async ที่ส่งคืนข้อมูล และ options คือออบเจ็กต์การตั้งค่าที่ไม่บังคับ

ฮุกนี้จะส่งคืนออบเจ็กต์ที่มี data, error, isLoading, isValidating และฟังก์ชัน mutate

พารามิเตอร์ key

key อาจเป็น URL แบบสตริง อาร์เรย์ของ [url, params] หรือ null คีย์แบบสตริงจะจับคู่กับคำขอ GET แบบง่าย คีย์แบบอาร์เรย์ช่วยให้คุณฝังตัวแปรอย่าง userId หรือ filters ไว้ในข้อมูลระบุเอกลักษณ์ของแคชได้

การส่งค่า null จะปิดใช้งานคำขอทั้งหมด เหมาะสำหรับการดึงข้อมูลแบบมีเงื่อนไขเมื่อข้อมูลที่จำเป็นยังไม่พร้อมใช้งาน

ฟังก์ชัน fetcher

fetcher จะรับคีย์ (หรือรับคีย์แบบอาร์เรย์ที่กระจายเป็นอาร์กิวเมนต์) และต้องส่งคืน Promise ค่าที่ได้รับเมื่อ Promise สำเร็จจะกลายเป็น data หาก fetcher โยนข้อผิดพลาด พร็อพเพอร์ตี error จะถูกกำหนดค่า

ตัวอย่าง: (url) => fetch(url).then(r => { if (!r.ok) throw new Error(r.status); return r.json(); }).

สถานะ data และ error

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

ตรวจสอบ if (error) เพื่อแสดงข้อความข้อผิดพลาด และตรวจสอบ if (!data) เพื่อแสดงโครงร่างขณะโหลด พร้อมจัดเตรียมส่วนติดต่อผู้ใช้สำรองที่ชัดเจน

isLoading เทียบกับ isValidating

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

ใช้ isLoading สำหรับหน้าจอโครงร่างขณะโหลด และใช้ isValidating สำหรับวงแหวนขนาดเล็กที่แสดงว่ากำลังรีเฟรชเบื้องหลัง

SWRConfig ส่วนกลาง

SWRConfig ช่วยให้คุณกำหนดฟังก์ชันดึงข้อมูลเริ่มต้น dedupingInterval, refreshInterval, ตัวจัดการ onError และตัวเลือกอื่น ๆ สำหรับการเรียกใช้ useSWR ทั้งหมดภายในต้นไม้ย่อยของมัน วิธีนี้รวมการตั้งค่าไว้ที่ศูนย์กลาง แทนการเขียนตัวเลือกซ้ำในฮุกแต่ละแห่ง

คุณสามารถวางผู้ให้บริการ SWRConfig หลายตัวซ้อนกัน เพื่อให้ส่วนต่าง ๆ ของแอปมีค่าเริ่มต้นแตกต่างกัน

การดึงข้อมูลแบบมีเงื่อนไขด้วยคีย์ Null

ส่ง null เป็นคีย์เพื่อข้ามคำขอ: useSWR(isLoggedIn ? '/api/user' : null, fetcher) SWR จะไม่ดึงข้อมูลจนกว่าคีย์จะเปลี่ยนเป็นค่าที่ไม่ใช่ null

วิธีนี้สะอาดกว่าการใช้ตัวเลือก skip ใน React Query เมื่อคีย์เปลี่ยนจาก null เป็นสตริง ระบบจะเริ่มดึงข้อมูลครั้งแรกโดยอัตโนมัติ

การดึงข้อมูลที่ขึ้นต่อกัน

เชื่อมโยงฮุก SWR สำหรับคำขอที่ขึ้นต่อกัน: const { data: user } = useSWR('/api/me', fetcher) จากนั้น const { data: orders } = useSWR(user ? '/api/orders/' + user.id : null, fetcher) ฮุกที่สองจะรอจนกว่าฮุกแรกจะทำงานเสร็จ

รูปแบบนี้ช่วยหลีกเลี่ยงสาย useEffect และทำให้การพึ่งพาข้อมูลมีลักษณะประกาศชัดเจนและอ่านง่าย

การขจัดคำขอซ้ำในการใช้งานจริง

หากคอมโพเนนต์ Header และคอมโพเนนต์ Sidebar ต่างก็เรียกใช้ useSWR('/api/user', fetcher) SWR จะส่งคำขอเพียงครั้งเดียวและแบ่งปันผลลัพธ์ให้ ทั้งสองคอมโพเนนต์จะเรนเดอร์ใหม่พร้อมกันเมื่อข้อมูลหรือ error อัปเดต

การขจัดคำขอซ้ำนี้เกิดขึ้นโดยอัตโนมัติภายในช่วงเวลา dedupingInterval (ค่าเริ่มต้น 2000ms) โดยไม่ต้องมีการตั้งค่าเพิ่มเติม

ตัวเลือก SWR ที่มีประโยชน์

refreshInterval: 5000 จะดึงข้อมูลเป็นระยะทุก 5 วินาที refreshWhenHidden: false จะหยุดการดึงข้อมูลเป็นระยะเมื่อแท็บไม่แสดงอยู่ shouldRetryOnError: false จะปิดการลองใหม่โดยอัตโนมัติ revalidateOnFocus: false จะปิดการตรวจสอบข้อมูลใหม่เมื่อกลับมาโฟกัส

ผสมผสานตัวเลือกต่าง ๆ ให้ตรงกับข้อกำหนดด้านความใหม่ของข้อมูล สำหรับแดชบอร์ดมักใช้ refreshInterval ส่วนเนื้อหาคงที่มักกำหนด revalidateOnFocus: false

การแบ่งหน้าด้วย useSWR

สำหรับข้อมูลที่แบ่งหน้า ให้รวมหมายเลขหน้าไว้ในคีย์: useSWR(['/api/items', page], fetcher) เมื่อเปลี่ยนหน้า ระบบจะดึงข้อมูลของหน้านั้นใหม่พร้อมแคชหน้าก่อนหน้าไว้

SWR ยังมี useSWRInfinite สำหรับรูปแบบที่ใช้เคอร์เซอร์หรือการเลื่อนแบบไม่สิ้นสุด โดยมีฟังก์ชัน getKey ที่สร้างคีย์ตามดัชนีหน้าและข้อมูลของหน้าก่อนหน้า

คีย์ SWR เป็น Null

จะเกิดอะไรขึ้นเมื่อส่ง null เป็นคีย์ให้ useSWR

ทบทวนบทเรียน

useSWR(key, fetcher) จะส่งคืน data, error, isLoading และ isValidating คีย์ที่เป็น null จะปิดใช้งานการดึงข้อมูลสำหรับคำขอแบบมีเงื่อนไขและคำขอที่ขึ้นต่อกัน isLoading แสดงว่ากำลังโหลดครั้งแรก ส่วน isValidating แสดงว่ามีคำขอใด ๆ กำลังดำเนินการอยู่ SWRConfig รวมค่าเริ่มต้นไว้ที่ศูนย์กลาง และการขจัดคำขอซ้ำระหว่างคอมโพเนนต์จะเกิดขึ้นโดยอัตโนมัติ

ตัวเลือกอย่าง refreshInterval, revalidateOnFocus และ shouldRetryOnError ช่วยปรับพฤติกรรมความใหม่ของข้อมูลสำหรับฮุกแต่ละแห่งหรือทั้งระบบได้อย่างละเอียด

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

บทเรียน “ฮุก useSWR: การดึงข้อมูล การโหลด และสถานะข้อผิดพลาด” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “ฮุก useSWR: การดึงข้อมูล การโหลด และสถานะข้อผิดพลาด”

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

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

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

บทเรียน “ฮุก useSWR: การดึงข้อมูล การโหลด และสถานะข้อผิดพลาด” ใช้เวลานานแค่ไหน

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

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

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

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

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