Получение данных продавцов в 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 создадим наш thunk fetchSellers. Клиенту мы передадим путь, указанный нами на сервере:

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 напишите thunk fetchTeachers.

В функции createSlice допишите дополнительный редьюсер, ограничьтесь обработкой успешного запроса.



Чат с GPT Компилятор