Множество connect компонентов, которые передают из store минимально необходимое количество данных - это верный подход, в таком случае компонент, обернутый в connect, будет обновляться только тогда, когда изменились реальные данные, от которых он зависит.
По вашей проблеме:
Представим, что в store у вас есть 2 свойства:
1) options - массив строк для селекта
2) selectedOption - выбранная строка (пустая по дефолту)
И например одно действие - selectOption(option), для обновления selectedOption в store.
Далее условные обернутые компоненты:
// Ваш сайдбар обновится при каждом изменении selectedOption
connect((state, ownProps) => ({ selectedOption: state.selectedOption }))(SidebarComponent)
// Ваш селект обновляется в зависимости от изменения обоих свойств,
// и используя свойство onSelect может обновить selectedOption самостоятельно
connect(
(state, ownProps) => ({ options: state.options, selectedOption: state.selectedOption }),
(dispatch, ownProps) => ({ onSelect: (value) => dispatch(selectOption(value)) })
)(SelectComponent)