Capítulo 124 de 456
Renderiza uma ou mais páginas simultaneamente (ou condicionalmente) dentro do mesmo layout, usando "slots" nomeados. Útil para dashboards, feeds e modais com deep linking.
@folder): convenção que cria uma prop nomeada no layout pai; não é um route segment e não afeta a URL.children como slot implícito: app/page.js equivale a app/@children/page.js.default.js: fallback renderizado para um slot não correspondido em hard navigation (refresh/load inicial); sem ele, Next.js renderiza 404.default.js para slots não correspondidos.export default function Layout({
children,
team,
analytics,
}: {
children: React.ReactNode
analytics: React.ReactNode
team: React.ReactNode
}) {
return (
<>
{children}
{team}
{analytics}
</>
)
}
@team e @analytics chegam como props ao layout e renderizam ao lado de children.import { checkUserRole } from '@/lib/auth'
export default function Layout({
user,
admin,
}: {
user: React.ReactNode
admin: React.ReactNode
}) {
const role = checkUserRole()
return role === 'admin' ? admin : user
}
@admin/page.js roda e busca dados para todo usuário, independente do que o layout retorna; autorize dentro da página ou na Data Access Layer.Link para fechar modal sem slot de fallback: navegação client-side para rota não correspondida mantém o slot visível; é preciso um @auth/page.tsx (ou catch-all [...catchAll]) retornando null.default.js para children: mesmo sendo slot implícito, ele também precisa de fallback quando Next.js não recupera o estado ativo do pai.(.)login) para modais com deep link, share via URL e navegação back/forward corretas.router.back() dentro de um Client Component, ou com Link apontando para uma rota que resolve o slot a null.useSelectedLayoutSegment('slotName') para ler o segmento ativo dentro de um slot específico.layout.js dentro de um slot permite navegação independente (ex.: tabs) sem afetar outros slots.