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