Kapslade layouter i NextJS
Som du vet, i mappen /app
i filen /layout.jsx
finns webbplatsens huvudlayout.
Om så önskas kan man dock i kapslade mappar skapa sina egna layouter. I så fall kommer sidans innehåll först att infogas i den kapslade layouten, och sedan kommer det resulterande resultatet att infogas i huvudlayouten.
Låt oss prova i praktiken. Antag att vår huvudlayout har följande utseende:
export default function RootLayout({children}) {
return (
<html lang="en">
<body>
<header>
header
</header>
<main>
{children}
</main>
<footer>
footer
</footer>
</body>
</html>
);
}
Låt oss skapa ytterligare en,
kapslad layout för allt
innehåll från mappen /users:
export default function UsersLayout({children}) {
return (
<div className="info">
message for all users
</div>
<div className="content">
{children}
</div>
);
}
Som du ser anger vi inte sidans grundläggande taggar i den här layouten, eftersom de redan finns i vår huvudsakliga webbplatslayout.
Låt oss också skapa en fil med innehåll för att visa användaren:
export default function User() {
return <>
<h1>User</h1>
<p>
user description
</p>
</>;
}
Efter dessa manipulationer kommer vår filstruktur att se ut så här:
- /app/
- layout.jsx
- /users/
- layout.jsx
- /show/
- page.jsx
Nu, om du går till motsvarande URL, kommer NextJS att sätta ihop allt och i webbläsaren får vi följande slutliga HTML-kod:
<html lang="en">
<body>
<header>
header
</header>
<main>
<div class="info">
message for all users
</div>
<h1>User</h1>
<p>
user description
</p>
</main>
<footer>
footer
</footer>
</body>
</html>
Skapa en sektion för användare och en sektion för inlägg på webbplatsen. Skapa i varje sektion en egen layout som ärver från webbplatsens huvudlayout.