Convenções de Roteamento no App Router do Next.js
O App Router do Next.js introduz diversas convenções para definir rotas e gerenciar metadados de forma eficiente.
Arquivos de roteamento
Os arquivos de roteamento são usados para definir layouts, páginas, e interfaces de usuário específicas, além de gerenciar pontos de API.
Layout (layout.[js/jsx/tsx])
Define o layout da página. Este arquivo é utilizado para componentes que devem estar presentes em várias páginas, como cabeçalhos ou rodapés.
// app/layout.jsx
export default function Layout({ children }) {
return (
<div>
<Header />
{children}
<Footer />
</div>
);
}Page (page.[js/jsx/tsx])
Define uma página específica. Cada arquivo page corresponde a uma rota.
// app/home/page.jsx
export default function HomePage() {
return <h1>Home Page</h1>;
}Loading UI (loading.[js/jsx/tsx])
Define uma interface de carregamento que é exibida enquanto os dados ou componentes estão sendo carregados.
// app/loading.jsx
export default function Loading() {
return <div>Loading...</div>;
}Not found UI (not-found.[js/jsx/tsx])
Define a interface para quando uma rota não é encontrada (404).
// app/not-found.jsx
export default function NotFound() {
return <h1>Page Not Found</h1>;
}Error UI (error.[js/jsx/tsx])
Define a interface de erro específica para a rota atual.
// app/error.jsx
export default function Error() {
return <h1>An error occurred</h1>;
}Global error UI (global-error.[js/jsx/tsx])
Define a interface de erro global, exibida para erros que não são específicos de uma rota.
// app/global-error.jsx
export default function GlobalError() {
return <h1>Global Error</h1>;
}API end-point (route.[js/jsx/tsx])
Define um ponto de extremidade (endpoint) de API.
// app/api/hello/route.js
export default function handler(req, res) {
res.status(200).json({ message: 'Hello, world!' });
}Re-rendered layout (template.[js/jsx/tsx])
Define um layout que pode ser re-renderizado em diferentes páginas.
// app/template.jsx
export default function Template({ children }) {
return <div className="template">{children}</div>;
}Parallel route fallback page (default.[js/jsx/tsx])
Define uma página fallback para rotas paralelas.
// app/default.jsx
export default function DefaultPage() {
return <h1>Default Page</h1>;
}Rotas aninhadas
As rotas aninhadas são definidas por diretórios e subdiretórios, que representam segmentos de rota.
folder: Representa um segmento de rota.
app/about/page.jsx -> /aboutfolder/folder: Representa um segmento de rota aninhado.
app/about/team/page.jsx -> /about/teamRotas Dinâmicas
Rotas dinâmicas permitem capturar valores de segmentos da URL.
[folder]: Captura um segmento de rota dinâmica.
app/[user]/page.jsx -> /user/:user[...folder]: Captura todos os segmentos de rota restantes (rota catch-all).
app/[...all]/page.jsx -> /**/*[[...folder]]: Captura todos os segmentos de rota restantes, incluindo uma rota opcional.
app/[[...optional]]/page.jsx -> /optional*?Grupos de rotas e pastas privadas
Grupos de rotas e pastas privadas permitem organizar rotas sem afetar a estrutura de roteamento.
(folder): Agrupa rotas sem afetar o roteamento.
app/(admin)/dashboard/page.jsx -> /dashboard_folder: Exclui a pasta e todos os segmentos filhos do roteamento.
app/_internal -> não gera rotasRotas paralelas e interceptadas
Rotas paralelas e interceptadas permitem a criação de slots nomeados e a interceptação de rotas.
@folder: Define um slot nomeado.
app/@auth/page.jsx -> /auth(.)folder: Intercepta a rota no mesmo nível.
app/(.)settings/page.jsx -> /settings(..)folder: Intercepta a rota um nível acima.
app/(..)/page.jsx -> /(..)(..)folder: Intercepta a rota dois níveis acima.
app/(..)(..)/page.jsx -> /(...)folder: Intercepta a rota desde a raiz.
app/(...)/page.jsx -> /Conclusão
As convenções de roteamento no App Router do Next.js são projetadas para oferecer flexibilidade e organização ao definir rotas e gerenciar metadados. Com essas convenções, você pode criar facilmente estruturas de navegação complexas e personalizadas para sua aplicação.