Mises en page imbriquées
Fait partie de la section L'essentiel de Next.js du Journey React de Coddy — leçon 13 sur 47.
Le layout racine n'est pas le seul. Placez un layout.jsx dans n'importe quel dossier et il englobe les routes de ce dossier, et uniquement celles-ci.
app/
layout.jsx wraps EVERYTHING
page.jsx /
menu/
layout.jsx wraps /menu and everything under it
page.jsx /menu
pizza/
page.jsx /menu/pizzaVisitez /menu/pizza et Next.js les imbrique de l'extérieur vers l'intérieur :
RootLayout
MenuLayout
PizzaPageVisitez / et seul le layout racine s'exécute : le layout menu n'est pas dans le chemin de cette URL, il n'apparaît donc jamais.
Un layout imbriqué s'écrit exactement comme le layout racine, sans la structure de base : pas de <html>, pas de <body>. Juste un composant qui accepte des children.
C'est ainsi qu'une section d'un site obtient sa propre barre latérale, ses propres onglets, son propre en-tête, sans la moindre instruction if concernant l'URL actuelle.
Défi
FacileLa section menu a besoin de son propre en-tête : sur /menu et sur ses pages de plats (dish), mais nulle part ailleurs.
app/menu/layout.jsx existe déjà et transmet children directement. À l'intérieur de son <section>, au-dessus de {children}, ajoutez :
- Un
<h2>avecid="menu-header"et le texteMenu
Les tests vérifient que l'en-tête s'affiche sur /menu et sur /menu/pizza, et qu'il a disparu de retour sur /.
Essayez vous-même
import './globals.css';
export const metadata = {
title: 'My App',
};
export default function RootLayout({ children }) {
return (
<html lang="en">
<body>
{children}
</body>
</html>
);
}Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de L'essentiel de Next.js
1Pourquoi Next.js
Ce que Next.js apporteLe dossier AppVotre première pageRécapitulatif : Pourquoi Next.js2Routage et liens
Les dossiers sont des routesRoutes imbriquéesLier des pagesRoutes dynamiquesPages non trouvéesRécapitulatif : Routage3Mises en page et métadonnées
La mise en page racineNavigation partagéeMises en page imbriquéesMétadonnées de pageMétadonnées dynamiquesRécapitulatif : Mises en page