Расскажите вашу историю успеха или фейла с redux или аналогичной библиотекой. Какие проблемы хорошо решились? Какие проблемы не решились? В итоге — хорошо или плохо? Станете ли использовать в следующем проекте?
Из моего опыта на Angular с ngrx и ngxs:
1. Разделение на action/reducer сильно заморачивает навигацию по коду. Видишь код типа store.dispatch(createOrder()) — нельзя просто тыкнуть мышкой и попасть в однозначный обработчик "create order", нужно искать конкретно reducer (многие reducers) где используется createOrder. Да, это здорово, что actions можно например логировать, но это очень побочная плюшка.
2. Хранить всё состояние в одном большом объекте — странная идея. Во-первых это в любом случае не всё состояние, а только кусок состояния фронтэнда, а во-вторых может мне удобнее часть локальных данных хранить в какой-нибудь маленькой броузерной nosql базе? Да, это здорово, что состояние можно логировать, но это снова побочная фича.
3. Reducers — странная идея. Очень бодро звучит: "это единственное место, где изменяется состояние" и "их очень легко тестировать, потому что стейтлес", но дальше не понятно. Почему я должен хотеть единственное место, где изменяется состояние? Я, может, мог бы это как-то принять, если бы оно не уродовало код, но ведь уродует. А "легко тестировать" — вообще не понятно. Внедрили синтетическую сущность, которая толком не делает ничего осмысленного, а выполняет какой-то огрызок работы — и её легко тестировать.
4. Сама идея иметь глобальный объект store на который завязано вообще всё — полная хрень. Смотришь ты на компонент CreateOrderPage — от чего он зависит? От store! Отлично. Смотришь на компонент LogInPage — от чего он зависит? От store! Т.е. код становится менее описательным и более синтетическим. LogInPage очевидно не должен быть никак связан с функциональностью создания ордеров — и здорово бы это видеть в явном виде, но нет — store и всё тут.
С другой стороны без этих библиотек тоже не очень понятно как сделать нормально. В некоторых случаях решения "прямо из кода компонента сделаем запрос" хватает, в некоторых возникает желание вынести этот код в отдельный сервис, особенно если есть логика, которую хочется тестировать. В итоге получается как-то ad hoc без внятных ответов. Хочется какой-то более системный подход.