Чим layout відрізняється від звичайного React-компонента?
Layout у Next.js - це теж React-компонент, але з особливими правилами і можливостями, які роблять його частиною системи маршрутизації та рендеру. Відмінності не в синтаксисі, а в контексті та поведінці.
Розберемо ключові відмінності.
1. Роль і призначення
Звичайний React-компонент
- Просто шматок UI
- Використовується там, де його підключили
- Нічого не знає про маршрути
Layout у Next.js
- Визначає структуру сторінок
- Прив'язаний до папки маршруту
- Автоматично обгортає всі вкладені сторінки
Тобто layout - це компонент + інфраструктурна роль.
2. Спосіб підключення
React-компонент
<Header />
<Footer />Ти сам вирішуєш, де і як його використовувати.
Layout
app/dashboard/layout.tsxПідключається автоматично до всіх сторінок у цій папці і нижче - без явного імпорту.
3. Поведінка під час навігації
Звичайний компонент
- Перемальовується разом зі сторінкою
- Втрачає стан при переході
Layout
- Зберігається при навігації
- Не розмонтовується, поки маршрут залишається в тій самій гілці
Це дає:
- збереження стану UI
- швидкі переходи
- більш "нативне" відчуття застосунку
4. Зв'язок з маршрутизацією
React-компонент
- Не залежить від URL
- Можна використовувати будь-де
Layout
- Жорстко пов'язаний з файловою структурою
- Успадковується вкладеними маршрутами
- Може бути вкладеним та ієрархічним
Файлова структура = структура інтерфейсу.
5. Робота з HTML-документом
Тільки layout може напряму повертати:
<html>
<body>{children}</body>
</html>Звичайний React-компонент так робити не повинен - він працює всередині вже наявного DOM-дерева.
6. Метадані та SEO
Layout
- Може задавати метадані
- Метадані успадковуються сторінками
- Підходить для SEO на рівні розділів
Звичайний компонент
- Не бере участі в системі metadata
- Не впливає на
<head>напряму
7. Тип компонента за замовчуванням
Layout
- Server Component типово
- Можна працювати з cookies, headers, БД
- Клієнтські хуки - тільки з
"use client"
React-компонент
- У звичайному React - завжди клієнтський
- У Next.js може бути client або server, але без спеціальних правил layout'а
Зведена таблиця
| Layout | Звичайний React-компонент | |
|---|---|---|
| Роль | Структура сторінок | UI-елемент |
| Підключення | Автоматичне | Ручне |
| Пов'язаний з роутами | Так | Ні |
| Зберігається при навігації | Так | Ні |
Керує <html> і <body> | Так | Ні |
| Метадані та SEO | Так | Ні |
| Server Component типово | Так | Залежить |
Короткий висновок
Layout - це не просто React-компонент, а частина архітектури Next.js. Він відповідає за структуру, навігацію, SEO і продуктивність, тоді як звичайні компоненти вирішують локальні UI-задачі.
Коротка відповідь
Для співбесідиКоротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.