Redux Toolkit: createSlice dan configureStore
Definisikan potongan state dengan createSlice, gabungkan dalam configureStore, dan dispatch action dari komponen React menggunakan useDispatch dan useSelector.
Redux Toolkit: createSlice dan configureStore adalah pelajaran Frontend Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Frontend Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Frontend Academy mencakup 4 pelajaran total.
Mengapa Redux Toolkit?
Redux Toolkit (RTK) adalah cara resmi dengan pola baku untuk menulis logika Redux. RTK menghilangkan kode boilerplate dari Redux biasa: tidak ada string tipe tindakan manual, pereduksi yang bertele-tele, atau penyiapan penyimpanan yang rumit.
Menginstal Redux Toolkit
Instal RTK dan pustaka pengikat React.
npm install @reduxjs/toolkit react-reduxcreateSlice — Status + Pereduksi + Tindakan
createSlice membuat irisan status beserta pereduksi dan pembuat tindakan dalam satu panggilan. Di balik layar, fungsi ini menggunakan Immer untuk pembaruan tanpa mutasi.
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 — Menyusun Penyimpanan
configureStore membuat penyimpanan Redux dengan setelan bawaan yang masuk akal: Redux DevTools diaktifkan dan lapisan perantara thunk disertakan.
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;Menyediakan Penyimpanan
Bungkus app Anda dengan <Provider store={store}> dari react-redux.
import { Provider } from 'react-redux';
import { store } from './store';
ReactDOM.createRoot(document.getElementById('root')!).render(
<Provider store={store}>
<App />
</Provider>
);useSelector — Membaca Status
useSelector(selector) membaca status dari penyimpanan. Komponen dirender ulang ketika irisan yang dipilih berubah.
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 — Mengirimkan Tindakan
useDispatch() mengembalikan fungsi dispatch milik penyimpanan. Panggil fungsi tersebut dengan pembuat tindakan untuk memicu perubahan status.
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 — Tindakan Asinkron
createAsyncThunk milik RTK menangani operasi asinkron (panggilan API) dan secara otomatis mengirimkan tindakan 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 — Pengambilan Data Bawaan
RTK Query (bagian dari RTK) menyediakan pengambilan data, penyimpanan cache, dan invalidasi secara otomatis. Tentukan titik akhir API dan dapatkan hook yang dihasilkan.
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 dalam Pereduksi
RTK menggunakan Immer secara internal, sehingga pereduksi slice dapat mengubah status secara langsung. Immer mendeteksi mutasi dan menghasilkan objek status baru yang tidak dapat diubah—Anda mendapatkan kemudahan mutasi dengan keamanan pembaruan tanpa mutasi.
Redux DevTools
Ekstensi peramban Redux DevTools memungkinkan Anda memeriksa setiap tindakan yang dikirim, status yang dihasilkan, bahkan melakukan perjalanan waktu: melompat ke status sebelumnya. Fitur ini sangat berguna untuk memecahkan masalah alur status yang kompleks.
Pemeriksaan Singkat
Apa yang dihasilkan createSlice dalam Redux Toolkit secara otomatis?
Ringkasan: Redux Toolkit
createSlice menggabungkan pereduksi + tindakan dalam satu definisi. Immer memungkinkan Anda memutasi status dengan aman. configureStore menyusun pereduksi dengan DevTools + thunk. useSelector membaca status. useDispatch mengirimkan tindakan. createAsyncThunk digunakan untuk alur asinkron. RTK Query digunakan untuk pengambilan data lengkap dengan penyimpanan cache.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Redux Toolkit: createSlice dan configureStore” gratis?
Ya — teks lengkap “Redux Toolkit: createSlice dan configureStore” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Frontend Academy, upgrade ke CoddyKit PRO. Kursus Frontend Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Redux Toolkit: createSlice dan configureStore”?
Definisikan potongan state dengan createSlice, gabungkan dalam configureStore, dan dispatch action dari komponen React menggunakan useDispatch dan useSelector. Kamu berlatih Frontend Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Frontend Academy?
Tidak diperlukan pengalaman sebelumnya. Frontend Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.
Berapa lama pelajaran “Redux Toolkit: createSlice dan configureStore” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Frontend Academy ini?
Ya. Setiap pelajaran Frontend Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Redux Toolkit: createSlice dan configureStore
- Zustand untuk State React yang Ringan
- Pinia untuk Vue: defineStore dan storeToRefs
- Kapan Menggunakan State Global atau Lokal