Создание макетов и страниц¶
Пока что в вашем приложении есть только главная страница. Давайте узнаем, как можно создать больше маршрутов с помощью макетов и страниц.
Вот темы, которые мы рассмотрим
- Создание маршрутов дашборда с использованием маршрутизации файловой системы.
- Поймите роль папок и файлов при создании новых сегментов маршрута.
- Создайте вложенный макет, который можно использовать совместно для нескольких страниц дашборда.
- Поймите, что такое размещение, частичный рендеринг и корневой макет.
Вложенная маршрутизация¶
Next.js использует маршрутизацию с помощью файловой системы, где папки используются для создания вложенных маршрутов. Каждая папка представляет собой сегмент маршрута, который сопоставляется с сегментом URL.
Вы можете создавать отдельные пользовательские интерфейсы для каждого маршрута с помощью файлов layout.tsx
и page.tsx
.
page.tsx
- это специальный файл Next.js, который экспортирует компонент React, и он необходим для того, чтобы маршрут был доступен. В вашем приложении уже есть файл страницы: /app/page.tsx
- это главная страница, связанная с маршрутом /
.
Чтобы создать вложенный маршрут, вы можете вложить папки друг в друга и добавить в них файлы page.tsx
. Например:
/app/dashboard/page.tsx
ассоциируется с путем /dashboard
. Давайте создадим страницу, чтобы посмотреть, как она работает!
Создание страницы дашборда¶
Создайте новую папку dashboard
внутри /app
. Затем создайте новый файл page.tsx
в папке dashboard
со следующим содержимым:
/app/dashboard/page.tsx | |
---|---|
1 2 3 |
|
Теперь убедитесь, что сервер разработки запущен, и посетите http://localhost:3000/dashboard. Вы должны увидеть текст «Страница дашборда».
Вот как можно создавать различные страницы в Next.js: создайте новый сегмент маршрута, используя папку, и добавьте в него файл page
.
Благодаря специальному названию для файлов page
Next.js позволяет размещать компоненты пользовательского интерфейса, тестовые файлы и другой связанный код вместе с маршрутами. Только содержимое внутри файла page
будет общедоступным. Например, папки /ui
и /lib
размещаются внутри папки /app
вместе с маршрутами.
Практика: Создание страниц дашборда¶
Давайте попрактикуемся в создании дополнительных маршрутов. В вашем дашборде создайте еще две страницы:
- Страница клиентов: Страница должна быть доступна по адресу http://localhost:3000/dashboard/customers. Пока что она должна возвращать элемент
<p>Customers Page</p>
. - Страница счетов: Страница счетов должна быть доступна по адресу http://localhost:3000/dashboard/invoices. Пока что она также должна возвращать элемент
<p>Invoices Page</p>
.
Потратьте некоторое время на выполнение этого упражнения, а когда будете готовы, разверните тумблер ниже для получения решения:
Откройте решение
У вас должна быть следующая структура папок:
Страница клиентов:
/app/dashboard/customers/page.tsx | |
---|---|
1 2 3 |
|
Страница «Счета-фактуры»:
/app/dashboard/invoices/page.tsx | |
---|---|
1 2 3 |
|
Создание макета дашборда¶
Дашборды имеют некую навигацию, которая используется на нескольких страницах. В Next.js вы можете использовать специальный файл layout.tsx
для создания пользовательского интерфейса, разделяемого между несколькими страницами. Давайте создадим макет для страниц дашборда!
В папке /dashboard
добавьте новый файл layout.tsx
и вставьте в него следующий код:
/app/dashboard/layout.tsx | |
---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
В этом коде происходит несколько вещей, поэтому давайте разберем их по порядку:
Во-первых, вы импортируете компонент <SideNav />
в ваш макет. Все компоненты, которые вы импортируете в этот файл, будут частью макета.
Компонент <Layout />
получает свойство children
. Этим дочерним компонентом может быть либо страница, либо другой макет. В вашем случае страницы внутри /dashboard
будут автоматически вложены в <Layout />
следующим образом:
Проверьте, что все работает правильно, сохранив изменения и проверив локальный хост. Вы должны увидеть следующее:
Одним из преимуществ использования макетов в Next.js является то, что при навигации обновляются только компоненты страницы, а макет не перерисовывается. Это называется частичным рендерингом, который сохраняет состояние React на стороне клиента в макете при переходе между страницами.
Корневой макет¶
В главе 3 вы импортировали шрифт Inter
в другой макет: /app/layout.tsx
. Напоминаем:
/app/layout.tsx | |
---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
Это называется корневой макет и требуется в каждом приложении Next.js. Любой пользовательский интерфейс, который вы добавите в корневой макет, будет общим для всех страниц вашего приложения. Вы можете использовать корневой макет для изменения тегов <html>
и <body>
, а также для добавления метаданных (подробнее о метаданных вы узнаете в следующей главе).
Поскольку новый макет, который вы только что создали (/app/dashboard/layout.tsx
), уникален для страниц дашборда, вам не нужно добавлять какой-либо пользовательский интерфейс в корневой макет выше.
Каково назначение файла layout в Next.js?
Источник — https://nextjs.org/learn/dashboard-app/creating-layouts-and-pages