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

การระบุชนิดสไลซ์และธังก์ของ Redux Toolkit

ใช้ createSlice และ createAsyncThunk พร้อมการอนุมานชนิดอย่างสมบูรณ์

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

เหตุใดจึงระบุชนิดข้อมูลให้ Redux Toolkit

Redux Toolkit (RTK) รองรับ TypeScript ได้ดี การระบุชนิดข้อมูลอย่างเหมาะสมทำให้ actions, state และ thunk แบบอะซิงโครนัสปลอดภัยด้านชนิดข้อมูลทั้งหมด โดยไม่ต้องระบุชนิดข้อมูลยืนยันด้วยตนเอง

import { createSlice, createAsyncThunk } from "@reduxjs/toolkit";

การระบุชนิดข้อมูลให้ส่วนติดต่อของ state

กำหนด state ของ slice เป็นส่วนติดต่อของ TypeScript ก่อนสร้าง slice

interface UserState {
  users: User[];
  loading: boolean;
  error: string | null;
}

const initialState: UserState = {
  users: [],
  loading: false,
  error: null,
};

createSlice พร้อม state ที่มีชนิดข้อมูล

ส่งชนิดข้อมูลของ state เป็นพารามิเตอร์ชนิดข้อมูลทั่วไป เพื่อให้แน่ใจว่า reducer จะได้รับ state ที่มีชนิดข้อมูลถูกต้อง

const userSlice = createSlice({
  name: "users",
  initialState,
  reducers: {
    setLoading(state, action: PayloadAction<boolean>) {
      state.loading = action.payload; // state: UserState — typed
    },
  },
});

การระบุชนิดข้อมูลให้ PayloadAction

ใช้ PayloadAction<T> จาก RTK เพื่อระบุชนิดข้อมูลของ action.payload ใน reducer

import { PayloadAction } from "@reduxjs/toolkit";

reducers: {
  addUser(state, action: PayloadAction<User>) {
    state.users.push(action.payload); // action.payload: User
  },
}

createAsyncThunk พร้อมชนิดข้อมูล

ระบุชนิดข้อมูลสำหรับค่าที่ส่งคืน อาร์กิวเมนต์ของ thunk และการกำหนดค่า API ของ thunk

const fetchUsers = createAsyncThunk<User[], void, { rejectValue: string }>(
  "users/fetchAll",
  async (_, { rejectWithValue }) => {
    try {
      return await api.getUsers();
    } catch (e) {
      return rejectWithValue("Failed to fetch");
    }
  }
);

การจัดการการกระทำของ thunk ใน extraReducers

ใช้ API แบบ callback ของ builder เพื่อจัดการการกระทำของ thunk ที่อยู่ระหว่างดำเนินการ สำเร็จ หรือถูกปฏิเสธโดยมีชนิดข้อมูลครบถ้วน

const userSlice = createSlice({
  name: "users",
  initialState,
  reducers: {},
  extraReducers: (builder) => {
    builder
      .addCase(fetchUsers.pending, (state) => { state.loading = true; })
      .addCase(fetchUsers.fulfilled, (state, action) => {
        state.users = action.payload; // action.payload: User[]
        state.loading = false;
      })
      .addCase(fetchUsers.rejected, (state, action) => {
        state.error = action.payload ?? "Unknown error";
      });
  },
});

RootState และ AppDispatch ที่มีชนิดข้อมูล

ส่งออก RootState และ AppDispatch ที่มีชนิดข้อมูลจากไฟล์ store เพื่อใช้ในฟังก์ชันเลือกข้อมูลและฮุก

import { configureStore } from "@reduxjs/toolkit";
const store = configureStore({ reducer: { users: userSlice.reducer } });
export type RootState = ReturnType<typeof store.getState>;
export type AppDispatch = typeof store.dispatch;

useSelector และ useDispatch ที่มีชนิดข้อมูล

สร้าง Redux hooks รุ่นที่มีชนิดข้อมูล เพื่อหลีกเลี่ยงการระบุชนิดข้อมูลยืนยันซ้ำในทุกคอมโพเนนต์

import { useDispatch, useSelector, TypedUseSelectorHook } from "react-redux";
export const useAppDispatch = () => useDispatch<AppDispatch>();
export const useAppSelector: TypedUseSelectorHook<RootState> = useSelector;

การระบุชนิดข้อมูลให้ RTK Query

RTK Query สร้างฮุกที่มีชนิดข้อมูลครบถ้วนจากคำจำกัดความของ endpoint โดยไม่ต้องระบุชนิดข้อมูลของการตอบกลับด้วยตนเอง

const api = createApi({
  reducerPath: "api",
  baseQuery: fetchBaseQuery({ baseUrl: "/api" }),
  endpoints: (build) => ({
    getUser: build.query<User, string>({
      query: (id) => `/users/${id}`,
    }),
  }),
});
export const { useGetUserQuery } = api;

การระบุชนิดข้อมูลให้ฟังก์ชันเลือกข้อมูล

เขียนฟังก์ชันเลือกข้อมูลที่มีชนิดข้อมูลโดยใช้ RootState เพื่อให้การเข้าถึง state ปลอดภัยด้านชนิดข้อมูล

const selectUsers = (state: RootState): User[] => state.users.users;
const selectLoading = (state: RootState): boolean => state.users.loading;

สรุป: RTK ที่มีชนิดข้อมูล

TypeScript ของ Redux Toolkit: กำหนดส่วนติดต่อของ state ใช้ PayloadAction<T> ใน reducer ระบุชนิดข้อมูลทั่วไปของ createAsyncThunk ส่งออก RootState และ AppDispatch และสร้างตัวห่อหุ้มฮุกที่มีชนิดข้อมูล

ตรวจสอบความเข้าใจ

คำอธิบายชนิดข้อมูลใดทำให้ action.payload ใน reducer ของ RTK ปลอดภัยด้านชนิดข้อมูล

สิ่งที่คุณได้เรียนรู้

TypeScript ของ Redux Toolkit: กำหนดส่วนติดต่อของ state ใน slice ใช้ PayloadAction<T> ใน reducer ระบุชนิดข้อมูลทั่วไปสามรายการให้ createAsyncThunk และส่งออก RootState/AppDispatch ที่มีชนิดข้อมูล พร้อมตัวห่อหุ้มฮุกสำหรับใช้ในคอมโพเนนต์

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

บทเรียน “การระบุชนิดสไลซ์และธังก์ของ Redux Toolkit” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “การระบุชนิดสไลซ์และธังก์ของ Redux Toolkit”

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

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

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

บทเรียน “การระบุชนิดสไลซ์และธังก์ของ Redux Toolkit” ใช้เวลานานแค่ไหน

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

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

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

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

  1. การระบุชนิดสไลซ์และธังก์ของ Redux Toolkit
  2. รูปแบบการระบุชนิดสโตร์ Zustand
  3. XState: เครื่องจักรสถานะที่ระบุชนิด
  4. สถานะที่อนุมานและตัวเลือกด้วยชนิด
← กลับไปที่ TypeScript Academy