Изменение структуры стейта в Redux

Первый этап, который мы будем реализовывать для взаимодействии нашего Redux приложения с каким-то внешним сервером - это получение данных, которые на нем хранятся при запуске приложения. Но прежде давайте внесем в наше приложение некоторые изменения.

Откроем наше приложение с продуктами, а в нем файл productsSlice.js. Обратите внимание на определение initialState. Изначально наш слайс с продуктами productsSlice - это массив, в котором имеются объекты (в нашем случае их два) с данными продуктов. Во-первых, так как теперь мы будем загружать их с сервера, то нам нужно убрать их из initialState. Во-вторых, мы будем посылать на сервер API запросы и нам будет важно знать об их статусе. Учитывая эти две вещи, давайте переделаем initialState. Пусть теперь это будет просто объект с полями products (изначально здесь не будет никаких данных, а просто пустой массив), status и error. Теперь наш код для initialState станет немного короче:

const initialState = { products: [], status: 'idle', error: null, }

Пока мы выставили статус 'idle' (бездействие), ведь первоначально мы не отправляем никаких запросов, а вообще он будет меняться и может принимать значения 'загрузка', 'выполнен', 'ошибка загрузки'. Помните, что для обозначения статуса вы можете выбрать те имена, которые будут удобны вам.

Спускаемся ниже по коду. Следом за изменением initialState, нам следует поменять и код, в котором мы работаем с этим стейтом в функциях-редьюсерах. Посмотрим на код для productAdded:

state.push(action.payload)

Теперь новые продукты мы будем складывать не просто в state для продуктов, а в его свойство state.products. Поэтому, заменим вышеуказанную строку на:

state.products.push(action.payload)

Соответственно, проделаем те же изменения для редьюсера reactionClicked. Вместо:

const currentProduct = state.find((product) => product.id === productId)

Теперь будет:

const currentProduct = state.products.find((product) => product.id === productId)

Замените сами state на state.products и в коде редьюсера productUpdated.

Откройте ваше приложение со студентами. Откройте в нем файл studentsSlice.js. Пусть теперь ваш initialState имеет три свойства: students, status, error - переделайте его, как показано в уроке.

Внесите соответствующие изменения и ниже по коду. Замените state на state.students в коде для ваших трех функций-редьюсеров.



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