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

Redux Toolkit: createSlice และ configureStore

กำหนดส่วนย่อยของสถานะด้วย createSlice รวมส่วนเหล่านั้นใน configureStore และส่ง action จากคอมโพเนนต์ React ด้วย useDispatch และ useSelector

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

ทำไมจึงใช้ Redux Toolkit

Redux Toolkit (RTK) เป็นแนวทางอย่างเป็นทางการที่กำหนดรูปแบบชัดเจนสำหรับการเขียนตรรกะของ Redux โดยขจัดโค้ดประกอบซ้ำซ้อนของ Redux แบบดั้งเดิม เช่น ไม่ต้องเขียนสตริงชนิดของแอ็กชันเอง ไม่ต้องเขียนตัวลดสถานะที่ยืดยาว และไม่ต้องตั้งค่า store ที่ซับซ้อน

การติดตั้ง Redux Toolkit

ติดตั้งทั้ง RTK และการผูกเข้ากับ React

npm install @reduxjs/toolkit react-redux

createSlice — สถานะ + ตัวลดสถานะ + แอ็กชัน

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

import { createSlice } from '@reduxjs/toolkit';

const counterSlice = createSlice({
  name: 'counter',
  initialState: { value: 0 },
  reducers: {
    increment: state => { state.value++; },     // Immer: mutate directly
    decrement: state => { state.value--; },
    reset: state => { state.value = 0; },
    incrementBy: (state, action) => { state.value += action.payload; }
  }
});

export const { increment, decrement, reset, incrementBy } = counterSlice.actions;
export default counterSlice.reducer;

configureStore — การประกอบ Store

configureStore สร้าง Redux store พร้อมค่าเริ่มต้นที่เหมาะสม ได้แก่ เปิดใช้ Redux DevTools และรวมมิดเดิลแวร์ thunk ไว้แล้ว

import { configureStore } from '@reduxjs/toolkit';
import counterReducer from './counterSlice';
import cartReducer from './cartSlice';

export const store = configureStore({
  reducer: {
    counter: counterReducer,
    cart: cartReducer,
  }
});

// TypeScript types:
export type RootState = ReturnType<typeof store.getState>;
export type AppDispatch = typeof store.dispatch;

การจัดเตรียม Store

ครอบ app ของคุณด้วย <Provider store={store}> จาก react-redux

import { Provider } from 'react-redux';
import { store } from './store';

ReactDOM.createRoot(document.getElementById('root')!).render(
  <Provider store={store}>
    <App />
  </Provider>
);

useSelector — การอ่านสถานะ

useSelector(selector) อ่านข้อมูลจาก store และเรนเดอร์คอมโพเนนต์ใหม่เมื่อส่วนของสถานะที่เลือกมีการเปลี่ยนแปลง

import { useSelector } from 'react-redux';
import type { RootState } from './store';

function Counter() {
  const count = useSelector((state: RootState) => state.counter.value);
  return <p>Count: {count}</p>;
}

useDispatch — การส่งแอ็กชัน

useDispatch() คืนค่าฟังก์ชัน dispatch ของ store ให้เรียกใช้ฟังก์ชันนี้พร้อมตัวสร้างแอ็กชันเพื่อทำให้สถานะเปลี่ยนแปลง

import { useDispatch } from 'react-redux';
import { increment, incrementBy } from './counterSlice';

function Controls() {
  const dispatch = useDispatch();
  return (
    <div>
      <button onClick={() => dispatch(increment())}>+1</button>
      <button onClick={() => dispatch(incrementBy(5))}>+5</button>
    </div>
  );
}

createAsyncThunk — แอ็กชันแบบอะซิงก์

createAsyncThunk ของ RTK จัดการการดำเนินการแบบอะซิงก์ เช่น การเรียก API และส่งแอ็กชัน pending/fulfilled/rejected โดยอัตโนมัติ

import { createAsyncThunk } from '@reduxjs/toolkit';

export const fetchUser = createAsyncThunk(
  'user/fetchById',
  async (userId: string) => {
    const res = await fetch(`/api/users/${userId}`);
    return res.json(); // becomes action.payload on fulfilled
  }
);

// In slice:
extraReducers: (builder) => {
  builder
    .addCase(fetchUser.pending, state => { state.loading = true; })
    .addCase(fetchUser.fulfilled, (state, action) => {
      state.loading = false;
      state.user = action.payload;
    });
}

RTK Query — การดึงข้อมูลในตัว

RTK Query ซึ่งเป็นส่วนหนึ่งของ RTK มีการดึงข้อมูล การแคช และการทำให้ข้อมูลไม่ถูกต้องโดยอัตโนมัติ ให้กำหนดปลายทาง API แล้วรับฮุกที่สร้างขึ้นโดยอัตโนมัติ

import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react';

export const api = createApi({
  baseQuery: fetchBaseQuery({ baseUrl: '/api' }),
  endpoints: (build) => ({
    getUsers: build.query<User[], void>({ query: () => 'users' }),
  })
});

// Generated hook:
const { data, isLoading, error } = api.useGetUsersQuery();

Immer ในตัวลดสถานะ

RTK ใช้ Immer ภายใน ดังนั้นตัวลดสถานะของ slice จึงสามารถเปลี่ยนสถานะโดยตรงได้ Immer จะตรวจจับการเปลี่ยนแปลงและสร้างออบเจ็กต์สถานะใหม่ที่ไม่เปลี่ยนค่าเดิมให้ คุณจึงได้ความสะดวกในการเขียนแบบเปลี่ยนค่า พร้อมความปลอดภัยของการไม่เปลี่ยนค่าเดิม

Redux DevTools

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

ตรวจสอบอย่างรวดเร็ว

createSlice ใน Redux Toolkit สร้างอะไรให้โดยอัตโนมัติ

สรุป: Redux Toolkit

createSlice รวมตัวลดสถานะกับแอ็กชันไว้ในคำจำกัดความเดียว Immer ช่วยให้คุณ “เปลี่ยนแปลง” สถานะได้อย่างปลอดภัย configureStore ประกอบตัวลดสถานะเข้ากับ DevTools และ thunk useSelector ใช้อ่านสถานะ useDispatch ใช้ส่งแอ็กชัน createAsyncThunk ใช้สำหรับลำดับการทำงานแบบอะซิงก์ และ RTK Query ใช้สำหรับการดึงข้อมูลเต็มรูปแบบพร้อมการแคช

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

บทเรียน “Redux Toolkit: createSlice และ configureStore” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “Redux Toolkit: createSlice และ configureStore”

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

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

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

บทเรียน “Redux Toolkit: createSlice และ configureStore” ใช้เวลานานแค่ไหน

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

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

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

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

  1. Redux Toolkit: createSlice และ configureStore
  2. Zustand สำหรับสถานะ React แบบเบา
  3. Pinia สำหรับ Vue: defineStore และ storeToRefs
  4. ควรใช้สถานะส่วนกลางหรือสถานะภายในเมื่อใด
← กลับไปที่ Frontend Academy