Reduxда сотиловчилар маълумотларини олиш
Келинг, маҳсулотлар билан иловамизни ишга туширамиз. Маҳсулотлар карточкаларида сотиловчилар кўрсатилмаганини кўрамиз. Келинг, уларни сервердан олиб, бу маълумотларни чиқарайлик. Бунинг учун бизга аллақачон таниш бўлган ҳаракатлар кетма-кетлигини амалга оширишимиз керак бўлади.
Бошлаш учун server.js файлини очамиз.
handlers массавини топамиз ва унга яна битта
GET-соринишни қайта ишлашни қўшамиз (маҳсулотлар учун
GET-соринишни қайта ишлагандан кейин). Кўриб турганингиздек,
у деярли бир хил:
http.get('/fakeServer/sellers', async () => {
await delay(ARTIFICIAL_DELAY_MS)
return HttpResponse.json(db.seller.getAll())
}),
Сервердаги соровни биз қайта ишладик. Кейинги босқичда
sellersSlice.js файлида сервердан маълумот олиш учун
thunk ёзишимиз керак. Бунинг учун унга client ва
createAsyncThunk ни импорт қиламиз:
import { createSlice, createAsyncThunk } from '@reduxjs/toolkit'
import { client } from '../../api/client'
Энди биз сотиловчиларни сервердан оламангиз,
шунинг учун уларни initialState дан олиб ташлаймиз,
фақат бош қовусларни қолдирамиз:
const initialState = []
Ва кейин sellersSlice функциясидан олдин
fetchSellers thunkимизни яратамиз. Клиентга
биз серверда кўрсатган йўлимизни ўтказамиз:
export const fetchSellers = createAsyncThunk(
'sellers/fetchSellers',
async () => {
const response = await client.get('/fakeServer/sellers')
return response.data
}
)
Биз учун фақат sellersSlice учун қўшимча
редьюсер яратиш қолди. Бу ерда муваффақиятли
соровни қайта ишлаш билан чекланамиз.
fetchSellers томонидан яратилган барча экшенлар,
fetchProducts экшенлари бибир хил бўлади:
const sellersSlice = createSlice({
name: 'sellers',
initialState,
reducers: {},
extraReducers(builder) {
builder.addCase(fetchSellers.fulfilled, (state, action) => {
return action.payload
})
},
})
Эслатиб ўтамиз, ўтган дафт маҳсулотларни олгандамиз,
биз жорий стейт қийматини ўзгартирган эдик. Бу ерда биз
бир оз бошқа йўлдан фойдаландик ва жуда оддийгина
янги қийматни қайтардик, createSlice да хам
шундай қилиш мумкин. Шу тариқа биз иккита мақсадга эришдик.
Биринчидан, биз маълумотларни олдик, иккинчидан, энди
бизда сотиловчилар рўйхатида яна нимадир пайдо бўлиши
хақида кафолат йўқ, чунки биз слайсни тўлиқ action.payload
қиймати билан қайта ёздик.
Студентларингиз билан иловангизни очинг.
Унда server.js файлини очиб, handlers
массасига ўқитувчилар учун яна битта GET-соринишни
қайта ишловчини қўшинг.
Энди teachersSlice.js файлини очинг.
initialState ни дарсда кўрсатилганидек бош
массив қилинг. studentsSlice функциясидан олдин
fetchTeachers thunkini ёзинг.
createSlice функциясида қўшимча редьюсерни
тўлдиринг, фақат муваффақиятли соровни қайта ишлаш
билан чекланинг.