Sep 9, 2024
libraries
Redux Toolkit’dagi asinxron ishlashi uchun createAsyncThunk funksiyasidan foydalanamiz. Bu funksiya API chaqiruvlari yoki boshqa asinxron vazifalarni boshqarish uchun juda qulay. Quyida bosqichma-bosqich asinxron thunk yaratish va undan foydalanishni ko‘rib chiqamiz.

1. Asinxron ishlash uchun createAsyncThunk ni ishlatish
createAsyncThunk funksiyasi asinxron ishlarni boshqarish uchun mo‘ljallangan. U ikki parametrni oladi:
- Thunk nomi (bu
slicening nomiga asoslanadi). - Asinxron funksiyaning o‘zi (bu yerda biz API chaqiruvini amalga oshiramiz).
Misol uchun, biz foydalanuvchilar ma’lumotini API orqali yuklaydigan thunk yaratamiz.
userSlice.js faylida:
import { createSlice, createAsyncThunk } from "@reduxjs/toolkit";
// 1. Asinxron thunk yaratish
export const fetchUserById = createAsyncThunk(
"users/fetchById",
async (userId) => {
const response = await fetch(
`https://jsonplaceholder.typicode.com/users/${userId}`,
);
return response.json();
},
);
// 2. Slice yaratish
const userSlice = createSlice({
name: "users",
initialState: {
user: null,
status: "idle", // idle, loading, succeeded, failed
error: null,
},
reducers: {},
extraReducers: (builder) => {
// pending holatida
builder.addCase(fetchUserById.pending, (state) => {
state.status = "loading";
});
// muvaffaqiyatli holatda
builder.addCase(fetchUserById.fulfilled, (state, action) => {
state.status = "succeeded";
state.user = action.payload;
});
// xato holatida
builder.addCase(fetchUserById.rejected, (state, action) => {
state.status = "failed";
state.error = action.error.message;
});
},
});
export default userSlice.reducer;
Yuqoridagi kodda biz fetchUserById nomli thunk funksiyasini yaratdik. Bu funksiya userId parametri bilan API’ga so‘rov yuboradi va javobni qaytaradi.
- pending: So‘rov yuborilganida holatni
loadingholatiga o‘zgartiramiz. - fulfilled: So‘rov muvaffaqiyatli bajarilganda
succeededholatini va foydalanuvchi ma’lumotlarini saqlaymiz. - rejected: Xatolik yuz berganda esa
failedholatini o‘rnatamiz va xatoni saqlaymiz.
2. Redux storeni sozlash
Redux do‘konida userSliceni qo‘shishimiz kerak:
store.js faylida:
import { configureStore } from "@reduxjs/toolkit";
import userReducer from "./userSlice";
const store = configureStore({
reducer: {
users: userReducer,
},
});
export default store;
Bu yerda biz userReducerni storemizga qo‘shib, Redux storeni sozlayapmiz.
3. Thunk’ni React komponentida ishlatish
Endi foydalanuvchi ma’lumotlarini yuklash va ekranga chiqarish uchun fetchUserById thunk’ni React komponentida ishlatamiz.
User.js faylida:
import React, { useEffect } from "react";
import { useSelector, useDispatch } from "react-redux";
import { fetchUserById } from "./userSlice";
function User({ userId }) {
const dispatch = useDispatch();
const user = useSelector((state) => state.users.user);
const status = useSelector((state) => state.users.status);
const error = useSelector((state) => state.users.error);
// 1. Komponent yuklanganida thunk’ni chaqirish
useEffect(() => {
dispatch(fetchUserById(userId));
}, [dispatch, userId]);
// 2. Holatga qarab komponentni render qilish
if (status === "loading") {
return <p>Loading...</p>;
}
if (status === "failed") {
return <p>Error: {error}</p>;
}
return (
<div>
{status === "succeeded" && user && (
<div>
<h2>{user.name}</h2>
<p>{user.email}</p>
</div>
)}
</div>
);
}
export default User;
Bu yerda:
useEffecthook’idan foydalanib, komponent yuklangandadispatch(fetchUserById(userId))chaqiramiz.useSelectoryordamida Redux do‘konidan foydalanuvchi ma’lumotlari, yuklanish holati (status) va xatolik (error)ni olamiz.- Holatga qarab, foydalanuvchi ma’lumotlari yuklanayotgan bo‘lsa
Loading..., muvaffaqiyatli yuklangan bo‘lsa foydalanuvchi ma’lumotlarini, xato bo‘lsa esa xatolikni chiqaramiz.
4. Asinxron ishlar bilan ishlash natijasi
- Foydalanuvchi komponent yuklanganda
fetchUserByIdchaqiriladi. - So‘rov
pendingbo‘lib, Redux storeidagi holatloadingga o‘zgartiriladi. - So‘rov muvaffaqiyatli bo‘lsa,
fulfilledholatga o‘tiladi va ma’lumotlar Redux do‘koniga saqlanadi. - Xato bo‘lsa,
rejectedholatga o‘tiladi va xato haqida xabar chiqariladi.
Mana shunday qilib, Redux Toolkit’dagi createAsyncThunk yordamida API chaqiruvlarini va boshqa asinxron ishlarni qulay boshqarish mumkin ekan.
React
Redux
Libraries
Ulashish: