Oi Gabriel, tudo bem?
Entendo sua confusão, mas a escolha por usar a tag <main> no exemplo que você compartilhou tem a ver com a semântica do HTML5.
A tag <main> é usada para encapsular o conteúdo principal e único de um documento ou aplicação, enquanto a tag <header> é usada para conter informações de introdução ou navegação.
No código que você mostrou, a tag <main> está sendo usada para encapsular todo o conteúdo da página, incluindo o cabeçalho, o conteúdo e o rodapé. Isso é feito porque o cabeçalho, o conteúdo e o rodapé juntos formam o conteúdo principal da página.
A tag <header> dentro do <main> é usada para conter o componente Cabecalho, que provavelmente contém informações de introdução ou navegação.
Quanto à sua sugestão de usar um Fragment, você poderia sim usar um Fragment (<> </>) em vez de <main>. No entanto, o uso de <main> ajuda a dar mais semântica ao seu código, o que pode ser útil para acessibilidade e SEO.
Aqui está um exemplo simplificado para ilustrar:
function PaginaBase() {
return (
<>
<Cabecalho />
<FavoritoProvider>
<Container>
<Outlet />
</Container>
</FavoritoProvider>
<Rodape />
</>
)
}
Neste exemplo, substituímos a tag <main> por um Fragment. Isso não causaria nenhum erro, mas também não adicionaria nenhuma semântica ao seu código.
Um abraço e bons estudos.