Indlejrede layouts i NextJS
Som du ved, i mappen /app
i filen /layout.jsx
placeres hovedlayoutet for hjemmesiden.
Hvis ønsket, kan der dog i indlejrede mapper oprettes egne layouts. I dette tilfælde vil sidens indhold først blive indsat i det indlejrede layout, og derefter vil det resulterende resultat blive indsat i hovedlayoutet.
Lad os prøve det i praksis. Lad vores hovedlayout have følgende udseende:
export default function RootLayout({children}) {
return (
<html lang="en">
<body>
<header>
header
</header>
<main>
{children}
</main>
<footer>
footer
</footer>
</body>
</html>
);
}
Lad os lave endnu et,
indlejret layout for alt
indhold fra mappen /users:
export default function UsersLayout({children}) {
return (
<div className="info">
message for all users
</div>
<div className="content">
{children}
</div>
);
}
Som du kan se, angiver vi i dette layout ikke sidens grundlæggende tags, da de allerede findes i vores hovedlayout for hjemmesiden.
Lad os også lave en fil med indhold til visning af en bruger:
export default function User() {
return <>
<h1>User</h1>
<p>
user description
</p>
</>;
}
Efter disse manipulationer vil vores filstruktur se sådan ud:
- /app/
- layout.jsx
- /users/
- layout.jsx
- /show/
- page.jsx
Nu, hvis du tilgår den tilsvarende URL, samler NextJS alt sammen, og i browseren får vi følgende endelige HTML-kode:
<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>
Lav en sektion med brugere og en sektion med indlæg på hjemmesiden. Lav i hver sektion dit eget layout, som vil arve fra hjemmesidens hovedlayout.