Что такое Redux? Полное руководство для начинающих
Что такое Redux? Полное руководство для начинающих
Рассказываем, что такое Redux, разбираем основной функционал этой библиотеки и приводим примеры её использования.
Redux — одна из наиболее популярных библиотек для управления состоянием в приложениях на JavaScript и TypeScript. Суть использования Redux в том, что все данные сосредоточены в глобальном хранилище и изменения происходят предсказуемо, с использованием чётко определённых механизмов. Это особенно важно при работе с масштабными проектами.
В небольших приложениях достаточно использовать локальное состояние, например useState в React. Однако с масштабированием проекта управление данными усложняется: приходится передавать состояние через пропсы, что затрудняет поддержку и усложняет код. Redux снимает эти трудности, предоставляя единое хранилище для данных.
Применять эту библиотеку рекомендуем в следующих ситуациях:
● в сложных одностраничных приложениях (SPA) с динамическим обновлением состояния — например, в панелях администрирования, где отображаются таблицы данных;
● в проектах с массой взаимосвязанных и вложенных компонентов, где сложно вручную передавать состояние между ними;
● когда требуется отслеживать историю преобразований состояния — например, в финансовых приложениях или текстовых редакторах, где важно иметь возможность откатиться к предыдущему состоянию;
● в мобильных приложениях на React Native, где управление состоянием важно для синхронизации между экранами.
Redux базируется на трех китах:
1. Все состояния хранятся в одном объекте (store). Это как большая коробка, где есть всё, что нужно для работы приложения. Такое решение значительно упрощает управление этими данными и их настройку.
2. Состояние должно быть доступно только для чтения — изменения возможны только через специальное действие actions. Это делает поведение приложения более предсказуемым, так как программист точно знает, после какого действия изменились данные.
3. Изменения в состоянии происходят только через чистые функции, которые называются редукторами, или редьюсерами (reducers). Эти функции берут текущее состояние и действие и возвращают новое состояние. Такой подход улучшает стабильность кода и упрощает его тестирование.
Использование Redux помогает избежать путаницы с передачей данных между компонентами, что особенно важно в больших приложениях.
Научиться работать с React и Redux можно на курсе «Фронтенд-разработчик». Он включает мощный набор инструментов и более 500 задач, повторяющих реальные рабочие условия. Учим только тому, что пригодится для решения настоящих задач.
Рассмотрим главные возможности этой библиотеки.
✅ Централизованное управление состоянием — все данные хранятся в одном месте, что упрощает доступ к ним и поддержку приложения. Компоненты не обмениваются данными напрямую, а получают их из глобальной «коробочки».
✅ Предсказуемость изменений — состояние изменяется только через редукторы, что делает логику обновления прозрачной и упрощает работу.
✅ Инструменты для отладки — благодаря Redux DevTools можно отслеживать каждое изменение состояния, видеть цепочку действий, воспроизводить изменения и анализировать производительность.
✅ Гибкость — Redux можно использовать не только с React, но и с другими фреймворками и библиотеками, например с Angular или Vue.js. Это универсальный инструмент для управления состоянием.
✅ Лёгкость тестирования — редукторы, или редьюсеры, представляют собой чистые функции, которые легко тестировать. Они не зависят от окружения и всегда дают предсказуемый результат при одних и тех же входных данных.
✅ Обработка асинхронных данных — с помощью middleware (Redux Thunk, Redux Saga) можно легко управлять асинхронными операциями, например загрузкой данных с сервера, обработкой ошибок и кешированием.
✅ Удобное масштабирование — чёткая структура данных и модульный подход позволяют легко расширять функциональность приложения без нарушения существующего кода.
✅ Уменьшение количества пропсов — компоненты получают данные напрямую из хранилища, что снижает сложность передачи состояния через пропсы и повышает читаемость кода.
✅ Повышенная производительность — благодаря использованию селекторов и мемоизации можно оптимизировать работу приложения и избежать лишних ререндеров компонентов.
✅ Совместимость с серверным рендерингом (SSR) — Redux позволяет передавать начальное состояние с сервера, что делает возможным рендеринг на стороне сервера в приложениях на Next.js или в других фреймворках.
1. Чтобы установить Redux и React-Redux, выполним в терминале команду:
2. Создадим хранилище в файле store.js:
Редуктор myReducer мы создадим далее.
Также важно отметить, что как альтернативный вариант можно использовать configureStore из библиотеки Redux Toolkit, но описанный выше метод также будет работать.
3. Сделаем провайдер для передачи хранилища в React-приложение. Для этого обернём корневой компонент приложения в компонент Provider из react-redux:
Разберём на примере, как при помощи Redux создать ту-ду-лист.
1. Создаём actions, не забывая про обязательное поле type:
2. Далее создаём reducer:
Редуктор по умолчанию должен возвращать новое состояние. Поэтому если мы не распознали тип действия, то возвращаем старое значение.
3. Подключаем к React компонент, используя хуки useSelector и useDispatch из react-redux. В итоге любой наш компонент сможет отправлять действия через useDispatch и получать данные из store с помощью useSelector .
Совет эксперта
Читать также: