React Academy · บทเรียน

การตั้งค่า React Query และ QueryClient

ติดตั้ง TanStack Query ห่อแอปด้วย QueryClientProvider และเรียกใช้ useQuery ครั้งแรก

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

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

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

ในบทเรียนนี้ คุณจะติดตั้ง TanStack Query ตั้งค่า QueryClient และ QueryClientProvider และเรียกใช้ useQuery ครั้งแรกเพื่อดึงข้อมูลจาก API

React Query คืออะไร

TanStack Query (เดิมชื่อ React Query) จัดการสถานะฝั่งเซิร์ฟเวอร์ ได้แก่ การดึงข้อมูล การแคช การซิงโครไนซ์ และการอัปเดตข้อมูลจากแหล่งข้อมูลระยะไกล โดยมาแทนการจัดการสถานะกำลังโหลดหรือข้อผิดพลาดด้วยตนเอง รวมถึงการดึงข้อมูลด้วย useEffect

การติดตั้ง

ติดตั้งแพ็กเกจหลัก และติดตั้ง DevTools เพิ่มเติมได้ตามต้องการ
npm install @tanstack/react-query
npm install @tanstack/react-query-devtools --save-dev

การสร้าง QueryClient

สร้างอินสแตนซ์ QueryClient เพื่อเก็บการแคชและการกำหนดค่าทั้งหมด จากนั้นส่งอินสแตนซ์นี้ให้กับ QueryClientProvider ซึ่งจะครอบแอปของคุณ
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';

const queryClient = new QueryClient();

createRoot(document.getElementById('root')).render(
  <QueryClientProvider client={queryClient}>
    <App />
  </QueryClientProvider>
);

useQuery ครั้งแรกของคุณ

เรียกใช้ useQuery พร้อมอาร์เรย์ queryKey และ queryFn ที่ส่งคืนข้อมูล คีย์นี้จะระบุรายการที่แคชไว้อย่างไม่ซ้ำกัน
import { useQuery } from '@tanstack/react-query';

function Posts() {
  const { data, isLoading, isError } = useQuery({
    queryKey: ['posts'],
    queryFn: () => fetch('/api/posts').then(r => r.json()),
  });

  if (isLoading) return <p>Loading...</p>;
  if (isError) return <p>Error!</p>;
  return <ul>{data.map(p => <li key={p.id}>{p.title}</li>)}</ul>;
}

คีย์ของคำขอ

คีย์ของคำขอคืออาร์เรย์ ให้เพิ่มพารามิเตอร์ลงในคีย์เพื่อกำหนดขอบเขตของรายการแคช คีย์ต่างกัน = รายการแคชต่างกัน
// All posts
useQuery({ queryKey: ['posts'], queryFn: fetchPosts })

// Post with id 5
useQuery({ queryKey: ['posts', 5], queryFn: () => fetchPost(5) })

// Posts filtered by category
useQuery({ queryKey: ['posts', { category: 'react' }], queryFn: /* ... */ })

สถานะของคำขอ

useQuery ส่งคืนพร็อพเพอร์ตีสถานะหลายรายการ ได้แก่ `isLoading`, `isFetching`, `isError`, `isSuccess`, `data` และ `error` โดย `isFetching` จะเป็น true แม้กำลังดึงข้อมูลใหม่เบื้องหลัง ส่วน `isLoading` จะเป็น true เฉพาะตอนโหลดครั้งแรกเท่านั้น

เครื่องมือสำหรับนักพัฒนา React Query

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

<QueryClientProvider client={queryClient}>
  <App />
  <ReactQueryDevtools initialIsOpen={false} />
</QueryClientProvider>

การกำหนดค่าเริ่มต้น

กำหนดค่าเริ่มต้นส่วนกลางใน QueryClient ได้แก่ staleTime, gcTime (การเก็บขยะ) จำนวนครั้งที่ลองใหม่ และ refetchOnWindowFocus
const queryClient = new QueryClient({
  defaultOptions: {
    queries: {
      staleTime: 60_000,     // data is fresh for 60s
      retry: 2,              // retry failed queries twice
      refetchOnWindowFocus: false,
    },
  },
});

การดึงข้อมูลใหม่โดยอัตโนมัติ

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

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

อาร์เรย์ queryKey ใน useQuery มีจุดประสงค์อะไร

สรุปทบทวน

ติดตั้ง @tanstack/react-query สร้าง QueryClient ครอบแอปด้วย QueryClientProvider และเรียกใช้ useQuery พร้อม queryKey และ queryFn เพิ่ม DevTools เพื่อให้มองเห็นข้อมูลการทำงาน และกำหนดค่าเริ่มต้นส่วนกลางใน QueryClient

ถัดไป

บทเรียนถัดไป: **การแคช เวลาที่ข้อมูลเก่า และการดึงข้อมูลใหม่เบื้องหลัง** — คุณจะกำหนด staleTime และ gcTime เพื่อควบคุมเวลาที่ข้อมูลจะถูกดึงใหม่
เริ่มต้นได้ฟรี

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

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

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

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

บทเรียน “การตั้งค่า React Query และ QueryClient” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “การตั้งค่า React Query และ QueryClient”

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

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

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

บทเรียน “การตั้งค่า React Query และ QueryClient” ใช้เวลานานแค่ไหน

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

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

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

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

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