Redux Toolkit — nima, Zustand dan farqi, qachon kerak
Muammodan boshlaylik
Siz yangi kompaniyaga ishga kirdingiz. Loyiha — 5 yillik, 40 ta dasturchi ishlagan, 300 dan ortiq komponent. Ochib qaraysiz: store/, slices/, useSelector, useDispatch, createAsyncThunk. Bu — Redux.
Yoki vakansiyalarni ko'rasiz: "React, TypeScript, Redux Toolkit". Zustand ni bilasiz, u soddaroq — nega hali ham Redux?
Redux — React ekotizimidagi eng eski va eng keng tarqalgan state boshqarish kutubxonasi. Uni bilmasdan katta loyihalarda ishlash qiyin.
Redux g'oyasi
Redux uchta qoidaga asoslangan:
- Yagona manba — butun ilovaning global state i bitta store da
- State faqat o'qiladi — uni to'g'ridan-to'g'ri o'zgartirib bo'lmaydi; faqat action yuborish orqali
- O'zgarishlar sof funksiyalarda — reducer lar eski state va action ni olib, yangi state qaytaradi
┌──────────────────────────────────────────┐
│ │
▼ │
┌───────┐ dispatch(action) ┌─────────┐ │
│ UI │ ───────────────────▶ │ reducer │ │
└───────┘ └─────────┘ │
▲ │ │
│ useSelector ▼ │
│ ┌─────────┐ │
└───────────────────────── │ store │ ────┘
└─────────┘
Bu useReducer (20-dars) bilan bir xil g'oya — faqat butun ilova miqyosida.
// Action — "nima sodir bo'ldi" degan oddiy obyekt
{ type: 'savat/qoshish', payload: { id: 42, nomi: 'Kitob' } }
// Reducer — eski state + action → yangi state
function savatReducer(state, action) {
switch (action.type) {
case 'savat/qoshish':
return { ...state, mahsulotlar: [...state.mahsulotlar, action.payload] };
default:
return state;
}
}
Redux va Redux Toolkit
Klassik Redux (2015) mashhur edi, lekin juda ko'p boilerplate (takroriy kod) talab qilardi: action type konstantalari, action creator funksiyalari, switch li reducer lar, qo'lda ...spread, store sozlash, middleware ulash. Bitta funksiyani qo'shish uchun 4–5 ta faylni o'zgartirish kerak edi.
Redux Toolkit (RTK) — Redux jamoasining rasmiy, zamonaviy usuli. U boilerplate ni deyarli butunlay olib tashlaydi:
// Redux Toolkit — bitta slice
const savatSlice = createSlice({
name: 'savat',
initialState: { mahsulotlar: [] },
reducers: {
qoshish: (state, action) => {
state.mahsulotlar.push(action.payload); // immer — to'g'ridan-to'g'ri
},
},
});
[!INFO] Bugun "Redux" deyilganda Redux Toolkit tushuniladi. Redux jamoasi klassik
createStoreni rasmiy ravishda eskirgan deb belgilagan. Eski loyihalarda klassik Redux ni uchratishingiz mumkin, lekin yangi kod — faqat RTK bilan. Batafsil — 60-dars.
Redux Toolkit nimalarni beradi
| Imkoniyat | Ma'nosi |
|---|---|
configureStore |
Store ni bir qatorda sozlash; DevTools va middleware avtomatik |
createSlice |
State, reducer va action larni bitta joyda; immer o'rnatilgan |
createAsyncThunk |
Async mantiq — pending/fulfilled/rejected holatlari bilan |
| RTK Query | TanStack Query ga o'xshash server state vositasi — RTK ichida |
| Redux DevTools | Har bir action, state tarixi, vaqt bo'ylab sayohat |
| Qat'iy tuzilma | Hamma bir xil yozadi — katta jamoalarda muhim |
Zustand va Redux Toolkit
// Zustand
const useSavat = create((set) => ({
mahsulotlar: [],
qoshish: (m) => set((s) => ({ mahsulotlar: [...s.mahsulotlar, m] })),
}));
const qoshish = useSavat((s) => s.qoshish);
qoshish(mahsulot);
// Redux Toolkit
const savatSlice = createSlice({
name: 'savat',
initialState: { mahsulotlar: [] },
reducers: {
qoshish: (state, action) => { state.mahsulotlar.push(action.payload); },
},
});
export const { qoshish } = savatSlice.actions;
const dispatch = useDispatch();
dispatch(qoshish(mahsulot));
| Zustand | Redux Toolkit | |
|---|---|---|
| Hajm | ~1 KB | ~15 KB (+ react-redux) |
| Boshlash | Bir necha daqiqa | Ko'proq tushuncha: slice, dispatch, store |
| Provider | Kerak emas | <Provider store={store}> |
| Store lar soni | Bir nechta kichik | Bitta umumiy store, slice larga bo'lingan |
| O'zgartirish usuli | Action ni to'g'ridan-to'g'ri chaqirish | dispatch(action) — har bir o'zgarish aniq hodisa |
| Tuzilma | Erkin — o'zingiz tanlaysiz | Qat'iy — standart naqshlar |
| DevTools | Middleware orqali | O'rnatilgan, eng kuchli |
| Server state | Yo'q (TanStack Query bilan) | RTK Query ichida |
| Bozor | Tez o'sib bormoqda | Ko'p mavjud loyihalar va vakansiyalar |
Qachon Redux Toolkit
✅ Redux Toolkit mos:
- Katta jamoa — 10+ dasturchi; qat'iy tuzilma kodni bir xil saqlaydi
- Murakkab state mantiq — ko'p slice lar bir-biriga ta'sir qiladi, action lar zanjiri
- Kuchli tarix kerak — har bir o'zgarishni qayd qilish, "bekor qilish" (undo), xatolarni qayta tiklash
- Loyihada allaqachon Redux bor
- Server state uchun RTK Query ni ham ishlatmoqchisiz — hammasi bitta ekotizimda
✅ Zustand mos:
- Kichik va o'rta loyihalar
- Global client state kam (savat, sozlamalar, auth)
- Server state — TanStack Query bilan
- Tez boshlash va kam kod muhim
[!TIP] Agar yangi loyiha boshlayotgan bo'lsangiz va global state kam bo'lsa — Zustand + TanStack Query — bugungi eng mashhur kombinatsiya. Lekin Redux Toolkit ni ham albatta o'rganing: mavjud loyihalarning katta qismi unda yozilgan va intervyularda tez-tez so'raladi.
O'rnatish
npm install @reduxjs/toolkit react-redux
@reduxjs/toolkit— Redux ning o'zi va RTK vositalarireact-redux— React bilan bog'lash:Provider,useSelector,useDispatch
Amaliy qism — keyingi darsda.
Nima uchun shunday?
Nima uchun Redux har bir o'zgarishni "action" sifatida yuborishni talab qiladi — to'g'ridan-to'g'ri o'zgartirish soddaroq emasmi?
Soddaroq — lekin kuzatib bo'lmaydi. Katta ilovada state o'nlab joydan o'zgaradi, va "bu qiymat qanday qilib noto'g'ri bo'lib qoldi?" degan savolga javob topish soatlab vaqt oladi. Redux da har bir o'zgarish — nomli hodisa (savat/qoshish), u yozib qo'yiladi va DevTools da ko'rinadi. Siz ilova tarixini qadam-baqadam qayta ko'rishingiz, istalgan holatga qaytishingiz, hatto foydalanuvchining xato hisobotiga action lar ro'yxatini qo'shib, xatoni aynan qayta hosil qilishingiz mumkin. Bu — "kamroq kod" o'rniga "ko'proq oldindan aytib bo'ladigan kod" tanlovi. Kichik loyihada bu ortiqcha; 300 komponentli loyihada — hayotiy zarurat.
Xulosa
Eslab qoling:
- Redux: yagona store, state faqat action orqali o'zgaradi, reducer lar — sof funksiyalar
useReducerg'oyasi — butun ilova miqyosida- Redux Toolkit — Redux ning zamonaviy rasmiy usuli; klassik Redux — eskirgan
- RTK:
configureStore,createSlice(immer bilan),createAsyncThunk, RTK Query - Zustand — kichik, erkin, tez; RTK — qat'iy tuzilma, kuchli DevTools, katta jamoalar
- Yangi loyiha uchun ko'pincha Zustand + TanStack Query; lekin RTK ni bilish — bozor talabi
- O'rnatish:
@reduxjs/toolkit+react-redux
Keyingi dars
60-dars: Redux Toolkit — slice, reducer, action