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

RTK Query: เอนด์พอยต์และการแคชอัตโนมัติ

กำหนดเอนด์พอยต์สำหรับ query และ mutation ด้วย createApi แล้วให้ RTK Query จัดการการแคช

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

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

ในบทเรียนนี้ คุณจะกำหนดจุดปลายทางสำหรับ query และ mutation ด้วย createApi ของ RTK Query แล้วให้ระบบจัดการการแคช สถานะการโหลด และการดึงข้อมูลโดยอัตโนมัติ

RTK Query คืออะไร

RTK Query คือชั้นการดึงข้อมูลและการแคชที่มีอยู่ใน Redux Toolkit ช่วยลดการจัดการสถานะการโหลดและข้อผิดพลาดด้วยตนเอง รวมคำขอที่ซ้ำกัน และแคชการตอบกลับตามจุดปลายทางและอาร์กิวเมนต์

การสร้าง API ด้วย createApi

เรียก createApi() พร้อม reducerPath, baseQuery และ endpoints ผลลัพธ์จะมีฮุกของ React ที่สร้างขึ้นโดยอัตโนมัติ
import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react';

export const userApi = createApi({
  reducerPath: 'userApi',
  baseQuery: fetchBaseQuery({ baseUrl: '/api' }),
  endpoints: (builder) => ({
    getUser: builder.query({ query: (id) => '/users/' + id }),
    getUsers: builder.query({ query: () => '/users' }),
  }),
});

export const { useGetUserQuery, useGetUsersQuery } = userApi;

การเพิ่ม API ลงใน Store

เพิ่ม reducer และ middleware ที่สร้างขึ้นลงใน configureStore โดย middleware จะจัดการวงจรชีวิตของแคช การทำให้แคชใช้ไม่ได้ และการดึงข้อมูลใหม่
import { configureStore } from '@reduxjs/toolkit';
import { userApi } from './userApi';

export const store = configureStore({
  reducer: { [userApi.reducerPath]: userApi.reducer },
  middleware: (gDM) => gDM().concat(userApi.middleware),
});

การใช้ Query Hook

เรียกฮุกที่สร้างขึ้นภายในคอมโพเนนต์ ฮุกนี้จะส่งคืน data, isLoading, isError และ refetch ระบบจะแคชข้อมูลตามอาร์กิวเมนต์ ดังนั้นฮุกเดียวกันที่ใช้อาร์กิวเมนต์เดียวกันจะส่งคืนข้อมูลจากแคชได้ทันที
function UserCard({ id }) {
  const { data, isLoading, isError } = useGetUserQuery(id);
  if (isLoading) return <Spinner />;
  if (isError) return <p>Error</p>;
  return <p>{data.name}</p>;
}

การรวมคำขอซ้ำโดยอัตโนมัติ

หากคอมโพเนนต์สองรายการเริ่มทำงานพร้อมกันและเรียก useGetUsersQuery() นั้น RTK Query จะส่งคำขอเครือข่ายเพียงรายการเดียว แล้วแบ่งปันการตอบกลับให้คอมโพเนนต์ทั้งสอง

อายุแคชด้วย keepUnusedDataFor

ควบคุมระยะเวลาที่ข้อมูลจากแคชจะคงอยู่ใน store หลังจากผู้สมัครรับข้อมูลทั้งหมดถูกถอดออก ค่าเริ่มต้นคือ 60 วินาที และคุณสามารถกำหนดค่าแยกตามจุดปลายทางได้
endpoints: (builder) => ({
  getUser: builder.query({
    query: id => '/users/' + id,
    keepUnusedDataFor: 300, // 5 minutes
  }),
})

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

ส่ง `pollingInterval` ไปยังการเรียกฮุก เพื่อให้ระบบดึงข้อมูลใหม่โดยอัตโนมัติทุก ๆ N มิลลิวินาที เหมาะสำหรับแดชบอร์ดและฟีดข้อมูลสด
const { data } = useGetStatsQuery(undefined, {
  pollingInterval: 5000, // refetch every 5 seconds
});

อาร์กิวเมนต์ของ Query และการข้ามการเรียก

ส่ง undefined หรือใช้ตัวเลือก `skip` เพื่อข้าม query ตามเงื่อนไข เหมาะเมื่อยังไม่มี ID ที่จำเป็น
const { data } = useGetUserQuery(userId, { skip: !userId });

การแปลงการตอบกลับ

ใช้ `transformResponse` เพื่อปรับรูปแบบการตอบกลับจาก API ก่อนแคช วิธีนี้ทำให้คอมโพเนนต์สะอาดขึ้น เพราะจะได้รับข้อมูลในรูปแบบที่ประมวลผลแล้ว ไม่ใช่รูปแบบดิบจาก API
getUsers: builder.query({
  query: () => '/users',
  transformResponse: (raw) => raw.data.users,
})

ตรวจสอบด่วน

หากคอมโพเนนต์สองรายการเรียกฮุก RTK Query เดียวกันด้วยอาร์กิวเมนต์เดียวกันในเวลาเดียวกัน จะเกิดอะไรขึ้น

สรุปทบทวน

createApi กำหนดจุดปลายทางและสร้างฮุกที่มีชนิดข้อมูลกำกับ เพิ่ม reducer และ middleware ลงใน store Query hook จะส่งคืน data, isLoading และ isError ระบบจะแคชและรวมคำขอที่ซ้ำกันโดยอัตโนมัติ

ขั้นถัดไป

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

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

บทเรียน “RTK Query: เอนด์พอยต์และการแคชอัตโนมัติ” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “RTK Query: เอนด์พอยต์และการแคชอัตโนมัติ”

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

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

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

บทเรียน “RTK Query: เอนด์พอยต์และการแคชอัตโนมัติ” ใช้เวลานานแค่ไหน

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

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

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

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

  1. สไลซ์ Redux Toolkit และ createSlice
  2. ตรรกะแบบอะซิงก์ด้วย createAsyncThunk
  3. RTK Query: เอนด์พอยต์และการแคชอัตโนมัติ
  4. การอัปเดตเชิงคาดการณ์และการทำให้แคชเป็นโมฆะ
← กลับไปที่ React Academy