Все зависит от задач. В реакте важно делать компоненты как можно более мелкими(главное совсем не переусердствовать, хоть это и непросто). Декомпозировать. Это важно особенно с компонентами, которые могут стать переиспользуемыми.
Сделать темплейты хедера и футера, а в них вкладывать другие еще более мелкие компоненты - вполне оправданно и нормально. Тем более зачастую в этих частях бывает какая-то жаваскриптовая логика.
То есть, будет вполне норм, если в стартовом компоненте, с которого начинается отрисовка приложения, и начальная логика - это как правило App component, у вас будет:
const App = () => {
<Header />
... other components
<Footer />
}
В общем говоря, лучше вынести хедеры и футеры по отдельным компонентам, т.к там наверняка впоследствии будет какой-то js код. Плюс, это логично и упорядоченно выглядит.