Я работаю над переписыванием / переносом моего огромного проекта слайд-шоу на React и Redux, который раньше был большим проектом jQuery с бизнес-логикой, хранящейся в больших классах.
Я собираюсь погрузитьсяпрямо в мою проблему.
У меня есть три редуктора Redux, действия и промежуточное ПО:
- Feeds
- Модерация
- Слайд-шоу
Промежуточное программное обеспечение feeds заботится о получении новых сообщений и их сохранении в feed.posts
Редуктор слайд-шоу поддерживает много информации о самом слайд-шоу и бизнес-логике, например, , какая публикация в настоящее время отображается, чтосообщение должно быть следующим и т. д. В нем также должен быть список сообщений, которые были отфильтрованы, например, не должно быть сообщений, которые были заблокированы.
Проблема, с которой я сталкиваюсь, заключается в следующем: :
Промежуточное программное обеспечение каналов отправляет действие с новыми сообщениями, а затем редуктор каналов сохраняет сообщения в feed.posts
.Это все хорошо.Но теперь я хочу, чтобы средство уменьшения слайд-шоу обрабатывало сообщения, удаляло сообщения, которые были заблокированы и т. Д., И затем сохраняло их в slideshow.posts
, тогда как feeds.posts
всегда будет содержать необработанный список сообщений для других целей.
Мое текущее решение в основном состоит в том, чтобы поймать действие новых сообщений в промежуточном программном обеспечении для слайд-шоу, и оттуда я отправляю новое действие с новыми сообщениями, которое затем можно обработать в редукторе слайд-шоу.Это чувствует анти-образец;использование промежуточного программного обеспечения для отправки действия, чтобы его можно было обработать в другом редукторе.
Другое решение состояло бы в отправке двух действий в промежуточном программном обеспечении каналов при появлении новых сообщений:
dispatch(feedNewPosts(posts))
dispatch(slideshowNewPosts(posts))
Таким образом, я могу избавиться от взлома промежуточного программного обеспечения, но он также чувствует анти-паттерн.
Тогда я подумалЧто касается использования селекторов, контейнер слайд-шоу будет выбирать посты и фильтровать их по заблокированному списку и т. д. Но проблема, с которой я сталкиваюсь при таком решении, заключается в том, что мне нужно знать, какие посты были заблокированы в редукторе слайд-шоу, потому что большинствотам происходит бизнес-логика для слайд-шоу.
Вот пример: промежуточное ПО для слайд-шоу отправляет действие, чтобы показать следующий слайд, dispatch(slideshowNextSlide())
.Редуктор слайд-шоу обрабатывает действие и проверяет, какой слайд должен отображаться следующим, и сохраняет этот слайд в состоянии как slideshow.nextSlide
, добавляет флаги к сообщению для анимации и т. Д. Поэтому, исходя из этого, мне нужен доступ к фильтрованным сообщениямв редукторе слайд-шоу.
Так что, если все это было обработано сложными селекторами, то у меня не будет всей информации, которая мне нужна в состоянии, например, какой слайд должен быть следующим, чтобы я могдобавить правильные классы анимации и т. д.
Есть ли что-то очевидное, что мне не хватает?Возможно, я пытаюсь хранить слишком много информации в состоянии, но мне нравится идея иметь полное состояние слайд-шоу в состоянии, , например, если я хочу сохранить состояние слайд-шоу и загрузить его позже, и т. Д..
Контейнер и компонент слайд-шоу будут очень глупыми, просто отобразите все, что находится в состоянии, добавьте определенные классы анимации, если сообщение соответствует slideshow.nextSlide
и так далее.Нет сложных селекторов.
Любая помощь в правильном направлении будет принята с благодарностью.
Спасибо.