Вложенные макеты в NextJS
Как вы знаете, в папке /app
в файле /layout.jsx
располагается основной макет сайта.
При желании, однако, во вложенных папках можно создавать свои макеты. В этом случае контент страницы будет сначала вставляться во вложенный макет, а затем получившийся результат будет вставляться в основной макет.
Давайте попробуем на практике. Пусть наш основной макет имеет следующий вид:
export default function RootLayout({children}) {
return (
<html lang="en">
<body>
<header>
header
</header>
<main>
{children}
</main>
<footer>
footer
</footer>
</body>
</html>
);
}
Давайте сделаем еще один,
вложенный макет для всех
конентов из папки /users:
export default function UsersLayout({children}) {
return (
<div className="info">
message for all users
</div>
<div className="content">
{children}
</div>
);
}
Как вы видите, в этом макете мы не указываем основные теги страницы, так как они уже есть в нашем основном макете сайта.
Давайте сделаем также файл с контентом для показа юзера:
export default function User() {
return <>
<h1>User</h1>
<p>
user description
</p>
</>;
}
После этих манипуляций наша файловая структура станет выглядеть так:
- /app/
- layout.jsx
- /users/
- layout.jsx
- /show/
- page.jsx
Теперь, если обратиться по соответствующему URL, NextJS соберет все вместе и в браузере мы получим следующий итоговый код HTML код:
<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>
Сделайте на сайте раздел с юзерами и раздел с постами. Сделайте в каждом разделе свой макет, который будет наследовать от основного макета сайта.