Перейти к основному содержимому
Неофициальный Бета-перевод

Эта страница переведена PageTurner AI (бета). Не одобрена официально проектом. Нашли ошибку? Сообщить о проблеме →

Мотивация

Поскольку требования к JavaScript одностраничным приложениям становятся всё сложнее, нашему коду приходится управлять большим объёмом состояния, чем когда-либо прежде. Это состояние включает серверные ответы и кэшированные данные, а также локально созданные данные, которые ещё не сохранены на сервере. Сложность UI-состояния также растёт: нам нужно управлять активными маршрутами, выбранными вкладками, спиннерами, элементами пагинации и так далее.

Управлять этим постоянно меняющимся состоянием сложно. Если одна модель может обновлять другую модель, то представление может обновить модель, которая обновит другую модель, что, в свою очередь, может вызвать обновление другого представления. В какой-то момент вы перестаёте понимать, что происходит в вашем приложении, поскольку теряете контроль над тем, когда, почему и как изменяется его состояние. Когда система непрозрачна и недетерминирована, воспроизводить ошибки или добавлять новые функции становится трудно.

Как будто этого недостаточно, учтите новые требования, ставшие обычными в фронтенд-разработке. От разработчиков ожидают обработки оптимистичных обновлений, серверного рендеринга, предварительной загрузки данных перед сменой маршрутов и много другого. Мы оказываемся перед необходимостью управлять сложностью, с которой никогда раньше не сталкивались, и неизбежно задаёмся вопросом: не пора ли сдаться? Ответ — нет.

С этой сложностью трудно справиться, потому что мы смешиваем две концепции, которые человеческому разуму тяжело осмыслить: мутацию и асинхронность. Я называю их Ментос и Кола. По отдельности они прекрасны, но вместе создают хаос. Библиотеки вроде React пытаются решить эту проблему на уровне представлений, устраняя асинхронность и прямое манипулирование DOM. Однако управление состоянием ваших данных остаётся на вас. Здесь и появляется Redux.

Следуя принципам Flux, CQRS и Event Sourcing, Redux стремится сделать мутации состояния предсказуемыми, накладывая определённые ограничения на то, как и когда могут происходить обновления. Эти ограничения отражены в трёх принципах Redux.