Редьюсеры в Redux

На прошлом уроке мы при помощи функции createSlice создали слайс для продуктов products и редьюсер, который будет обновлять этот слайс, хранящийся в store. Еще раз напоминаю, что в Redux данные стейта изменяются при помощи редьюсеров.

Надо помнить, что на редьюсеры накладывается ряд ограничений. Редьюсер обновляет состояние только на основе полученных значений текущего стейта и объекта action, а затем решает как изменить стейт и возвращает его новое значение.

Мы знаем, что по умолчанию объекты и массивы в JavaScript мутабельны (изменяемы). Также мы знаем, что менять state напрямую нельзя, в таком случае надо работать только с копиями. Этому правилу должен подчиняться и редьюсер. Но написание такой логики вручную может быть довольно утомительным и сложным занятием, и здесь на помощь приходит функция createSlice, которая использует библиотеку Immer, преобразующую ваш 'мутабельный' код в 'немутабельный'. Таким образом, грешить и упрощать жизнь можно только при использовании функций createSlice или createReducer.

В число ограничений редьюсера входит также использование асинхронной логики, высчисление случайных значений и выполнение других "сторонних эффектов". А теперь, познакомившись с редьюсером поближе, вернемся к нашему приложению с продуктами.

В нашем приложении есть store, который мы создали в предыдущих уроках, но пока в нем ничего нет. Давайте откроем наш файл store.js и добавим в него немного кода. Для начала импортируем в него функцию reducer для продуктов:

import productsReducer from '../parts/products/productsSlice'

Теперь в качестве редьюсера мы можем указать импортированную функцию productsReducer:

export default configureStore({ reducer: { products: productsReducer } })

Вышеуказанной строчкой мы говорим нашему store, что теперь при возникновении action все данные для слайса state.products будут обновляться редьюсером productsReducer.

Теперь вы можете запустить приложение (заметьте, что в консоли исчезло предупреждение о невалидном редьюсере!), открыть Redux DevTools в браузере и полазить по его вкладкам. К примеру, нажав на вкладку State во вкладке Inspector мы можем видеть два наших объекта с продуктами, которые вывелись в качестве начального значения стейта при первом запуске приложения. На вкладке Log monitor мы видим какие слайсы имеет в себе глобальный стейт - это слайс products, включающий два объекта. Также загляните на вкладку Chart.

Откройте ваше приложение со студентами и измените код файла store.js, как показано в уроке.

Запустите в браузере ваше приложение и полазьте по вкладкам расширения Redux DevTools.



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