Redux
Redux на примере игры Ханойские Башни
https://gitlab.in6k.com/meetup/tower-of-hanoi
#
💻 Использовать react-redux в todo-list-app#
StateГлобальное состояние может иметь следующий вид:
Статистика открытых задач вынесена в отдельную ветку openedTasks
для простого обновления. Ключ - id списка. Значение - количество открытых задач в списке.
Ветка tasks
сделана в виде объекта для кеширования задач из списка. После последующих открытий списка задачи сразу будут браться из кеша и потом обновляться данными с сервера.
#
Структура папок и reducerСтруктура папок повторяет основные ветки состояния. Так, reducer и actions относящиеся к ветке состояния dashboard
находятся в одноименной папке.
Для удобства обновления состояния выделяются редьюсеры для работы с одной конкретной веткой и сливаются потом в один комбинированный редьюсер функцией combineReducers. Результатом работы такого редьюсера всегда будет объект.
В store/index.js
файле combineReducers
используется для создание корневого редьюсера на основе редьюсеров веток первого уровня.
#
Асинхронные actionsРедьюсеры по своей природе синхронные функции без побочных эффектов. В чистом redux action - это объект с полем type
и другими полями с данными. Для выполнения асинхронных действий используется библиотека redux-thunk. Она добавляет в store промежуточный слой (middleware) для перехвата действий типа Function
. Если в store в отправить не объект а функцию, то ее перехватит redux-thunk и вызовет, передав ссылку на функцию dispatch уже следующего middleware (или чистого store, если других middleware нет).
Вот как может выглядеть действие загрузки дeшборда.
В примере выше мы используем принятое в redux свойство payload
для обозначения полезной нагрузки (данных) действия. Свойство это может называться и иначе и быть не единственным свойством с данными. Тут уже как решат разработчики в команде.
#
Подключение redux-thunkЧто бы redux начал "понимать" action-ы с типом Function, thunk middleware необходимо внедрить в store.
#
middleware + Redux DevToolПри использовании сразу нескольких расширений store (middleware, Redux DevTool) код будет немного сложнее.
Redux DevTool
Описание разных вариантов подключения Redux DevTool по ссылке https://github.com/zalmoxisus/redux-devtools-extension#12-advanced-store-setup
#
Действия с параметрамиЧасто наши асинхронные действия нуждаются в дополнительных параметрах. К примеру, для получения задач списка надо указать id списка. Для такого действия нам понадобиться функция обертка, вызвав которую мы получим асинхронное действие с "встроенным" параметром.
Смотрите также: