Поскольку требования к одностраничным приложениям для JavaScript становятся все более сложными, наш код должен управлять большим количеством состояний, чем когда-либо прежде. Это состояние может включать ответы сервера и кэшированные данные, а также локально созданные данные, которые еще не были сохранены на сервере. Состояние пользовательского интерфейса также возрастает по сложности, поскольку нам нужно управлять активными маршрутами, выбранными вкладками, спинерами, пагинацией и тд.
Управление этим постоянно меняющимся состоянием сложно. Если модель может обновить другую модель, то представление может обновить модель, которая обновит другую модель, и это, в свою очередь, может привести к обновлению другого вида. В какой-то момент вы больше не понимаете, что происходит в вашем приложении, поскольку вы потеряли контроль над тем, когда, почему и как его состояние. Когда система непрозрачна и не детерминирована, трудно воспроизвести ошибки или добавить новые функции.
Как разработчики, мы должны обрабатывать обновления, рендеринг на стороне сервера, сбор данных перед выполнением переходов маршрута и тд. Мы пытаемся справиться с такой сложностью, с которой нам никогда не приходилось сталкиваться, и мы неизбежно задаем вопрос: пора ли сдаваться? Ответ - нет.
Такие задачи трудно решать, поскольку мы смешиваем две концепции, которые очень трудно понять человеческому разуму: мутация и асинхронность. Я называю их Mentos и Coke. Оба могут быть большими в разлуке, но вместе они создают беспорядок. Библиотеки, такие как React, пытаются решить эту проблему на уровне представления, удаляя как асинхронность, так и прямую манипуляцию DOM. Однако управление состоянием ваших данных остается за вами. Именно здесь входит Redux.