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

การแคช อายุข้อมูล และการดึงข้อมูลเบื้องหลัง

กำหนดค่า staleTime และ gcTime เพื่อควบคุมเวลาที่จะดึงข้อมูลจากเซิร์ฟเวอร์อีกครั้ง

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

ยินดีต้อนรับ

ในบทเรียนนี้ คุณจะกำหนด staleTime และ gcTime เพื่อควบคุมระยะเวลาที่ React Query เก็บข้อมูลให้เป็นข้อมูลใหม่ และระยะเวลาที่เก็บข้อมูลแคชไว้ในหน่วยความจำ

ข้อมูลใหม่เทียบกับข้อมูลเก่า

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

staleTime

staleTime กำหนดระยะเวลา (มิลลิวินาที) ที่ข้อมูลจะยังคงเป็นข้อมูลใหม่ ค่าเริ่มต้นคือ 0 (ถือว่าเก่าทันที) การตั้งค่าเป็น 60000 หมายความว่าข้อมูลที่ดึงมาภายในหนึ่งนาทีล่าสุดจะถูกส่งคืนโดยไม่ดึงข้อมูลใหม่เบื้องหลัง
useQuery({
  queryKey: ['users'],
  queryFn: fetchUsers,
  staleTime: 60_000, // fresh for 60 seconds
})

การตั้งค่า staleTime สำหรับข้อมูลคงที่

สำหรับข้อมูลที่เปลี่ยนแปลงไม่บ่อย (เช่น รายการประเทศหรือตัวเลือกการกำหนดค่า) ให้ตั้งค่า staleTime สูง สำหรับข้อมูลแบบเรียลไทม์ (เช่น ราคาหุ้น) ให้คงค่าเริ่มต้น 0 และเปิดใช้การดึงข้อมูลเป็นระยะ
// Effectively never stale — reload only on explicit invalidation
useQuery({ queryKey: ['countries'], queryFn: fetchCountries,
  staleTime: Infinity })

gcTime (การเก็บขยะ)

gcTime (เดิมคือ cacheTime) กำหนดระยะเวลาที่ข้อมูลแคชซึ่งเป็น UNUSED จะอยู่ในหน่วยความจำก่อนถูกเก็บขยะ ค่าเริ่มต้นคือ 5 นาที แม้พ้นระยะ gcTime แล้ว React Query ก็ยังสามารถดึงข้อมูลใหม่ได้ทันทีเมื่อมีผู้สมัครรับข้อมูลรายใหม่ถูกเมานต์
useQuery({
  queryKey: ['products'],
  queryFn: fetchProducts,
  gcTime: 10 * 60 * 1000, // keep in memory for 10 minutes
})

staleTime เทียบกับ gcTime

staleTime ควบคุมว่าจะดึงข้อมูลใหม่เมื่อใด (ความใหม่ของข้อมูล) ส่วน gcTime ควบคุมว่าจะทิ้งข้อมูลแคชออกจากหน่วยความจำเมื่อใด โดยทั่วไป staleTime <= gcTime

ตัวบ่งชี้การดึงข้อมูลใหม่เบื้องหลัง

เมื่อ React Query ดึงข้อมูลใหม่เบื้องหลัง `isFetching` จะเป็น true แม้ `isLoading` จะเป็น false (เนื่องจากมีข้อมูลอยู่ในแคชแล้ว) ให้ใช้ isFetching เพื่อแสดงตัวหมุนขนาดเล็กที่ไม่รบกวนผู้ใช้
const { data, isLoading, isFetching } = useQuery({ /* ... */ });

return (
  <>
    {isLoading ? <Spinner /> : <DataView data={data} />}
    {isFetching && !isLoading && <RefreshIndicator />}
  </>
);

refetchOnWindowFocus

ตามค่าเริ่มต้น React Query จะดึงคำขอที่เก่าใหม่เมื่อผู้ใช้สลับกลับมายังแท็บ ปิดใช้งานตัวเลือกนี้สำหรับข้อมูลที่อัปเดตไม่บ่อย
useQuery({
  queryKey: ['settings'],
  queryFn: fetchSettings,
  refetchOnWindowFocus: false,
})

refetchInterval สำหรับการดึงข้อมูลเป็นระยะ

ตั้งค่า `refetchInterval` เพื่อดึงคำขอโดยอัตโนมัติตามช่วงเวลาที่กำหนด เหมาะสำหรับแดชบอร์ดข้อมูลแบบเรียลไทม์
useQuery({
  queryKey: ['liveStats'],
  queryFn: fetchStats,
  refetchInterval: 5000, // every 5 seconds
})

ข้อมูลตัวแทน

ใช้ `placeholderData` เพื่อแสดงข้อมูลก่อนหน้าขณะที่กำลังดึงข้อมูลใหม่ ซึ่งช่วยป้องกันการเลื่อนของเค้าโครง ตัวเลือก keepPreviousData ช่วยให้การแบ่งหน้าในลักษณะนี้ทำได้ง่าย
import { keepPreviousData } from '@tanstack/react-query';

useQuery({
  queryKey: ['posts', page],
  queryFn: () => fetchPage(page),
  placeholderData: keepPreviousData,
})

ตรวจสอบความเข้าใจอย่างรวดเร็ว

การตั้งค่า staleTime: Infinity ให้กับคำขอจะทำให้เกิดผลอย่างไร

สรุปทบทวน

staleTime ควบคุมความใหม่ของข้อมูล — ระยะเวลาก่อนที่ข้อมูลจะทำให้เกิดการดึงข้อมูลใหม่เบื้องหลัง gcTime ควบคุมหน่วยความจำ — ระยะเวลาที่ข้อมูลซึ่งไม่ได้ใช้งานจะอยู่ในแคช isFetching ใช้ระบุการดึงข้อมูลใหม่เบื้องหลัง และใช้ placeholderData เพื่อให้การแบ่งหน้าเป็นไปอย่างราบรื่น

ถัดไป

บทเรียนถัดไป: **การเปลี่ยนแปลงข้อมูลด้วย useMutation** — คุณจะส่งข้อมูลไปยัง API และทำให้คำขอที่เกี่ยวข้องไม่ถูกต้องหลังดำเนินการสำเร็จ

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

บทเรียน “การแคช อายุข้อมูล และการดึงข้อมูลเบื้องหลัง” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “การแคช อายุข้อมูล และการดึงข้อมูลเบื้องหลัง”

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

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

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

บทเรียน “การแคช อายุข้อมูล และการดึงข้อมูลเบื้องหลัง” ใช้เวลานานแค่ไหน

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

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

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

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

  1. การตั้งค่า React Query และ QueryClient
  2. การแคช อายุข้อมูล และการดึงข้อมูลเบื้องหลัง
  3. Mutation ด้วย useMutation
  4. การเลื่อนแบบไม่สิ้นสุดและการแบ่งหน้า ด้วย useInfiniteQuery
← กลับไปที่ React Academy