การระบุชนิดสไลซ์และธังก์ของ 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การระบุชนิดสไลซ์และธังก์ของ Redux Toolkit
- รูปแบบการระบุชนิดสโตร์ Zustand
- XState: เครื่องจักรสถานะที่ระบุชนิด
- สถานะที่อนุมานและตัวเลือกด้วยชนิด