Как быть в рамках Redux, когда экшены раскиданы по компонентам?
Доброй ночи.
Есть компонент модального окна , который я сделал контейнером (при помощи connect присоединил все нужные экшены). Соответственно, у него два экшена: open и close. Если с close все предельно ясно (вызываем его при клике на кнопку в самом компоненте Modal), то с open все сложно: этот экшен может вызвать любая ссылка в любом компоненте приложения.
Как лучше поступить? Пока придумал сделать контейнером самый главный, корневой компонент, и спускать сверху вниз экшены по иерархии, передавая их в props, когда нужно, но не грязное ли это решение? Напоминаю, что вызвать экшен open может любая ссылка в приложении.
Решение плохое. В таком случае можно было и вовсе обойтись без Redux. Обернуть в connect можно любой компонент. И чем ближе вы будете передавать части состояния к месту их использования, тем меньше в вашем приложении будет лишних перерисовок.
Одно модальное окно на все приложение не лучшее решение.
Есть такая же задача, для себя выбрал такое решение, уже были доработки (увеличить количество попапов и логику в них - все легко добавляется):
делаете PopupContainer в котором отрисовываете все модальные окна. У них в isOpen (признаке показано/скрыто) - значение из редьюсера попапов. У меня редьюсер там простейший - просто имя попапа + true/false.
Итого имеем возможность показать любой попап хоть откуда, нет излишнего дублирования кода, и для каждого попапа можно назначить свои экшены, которые уже будут спускаться в дочерний "тупой" компонент, на onClose или на какое-то действие внутри попапа, например: отправить заявку на подписку.