connect нужен для того чтобы подписать компонент на события редуцера и дать доступ к данным редуцера. А роутинг он вообще в стороне от redux (хотя, конечно, есть роутеры, работающие через redux).
Я обычно придерживаюсь следующего: connect применяю к компонентам-контейнерам верхнего уровня, которыми управляет роутер(в вашем случае это Component-1, Component-2). Во все остальные простые (dumb) компоненты, находящиеся в контейнере, данные получают в параметрах (через props) от контейнера.
Если вложенные компоненты должны как-то взаимодействовать с redux: для этого в компоненте-контейнере определяются функции, которые видят редуцеры и dispatch. Дальше эти функции отдаются dumb-компонентам через props и они их могут вызвать по какому-то своему событию.
Теоретически вы можете делать connect к любому компоненту, но во первых это более накладно по ресурсам и во вторых это убивает инкапсуляцию. Прелесть т.н. "тупых" компонентов в том что они простые и зависят только от явных параметров (props) и следовательно легко переносимы. Добавляя к ним connect мы прибиваем их гвоздями к модели данных конкретного приложения.