Link Search Menu Expand Document
06 Апреля 2024 г.

Next.js. Маршруты

Содержание

Важной темой понимания next.js - это маршрутизация.

Дерево строится иерархией каталогов.

В базовом варианте у нас есть корневая папка app всех маршрутов с папками маршрутами с обязательными файлами page в каждой.

Бывают клиентские и серверных компоненты. Но об этом отдельно.

В базовом варианте берется страница соотвествующая последнему сегменту пути.

Базовое использование

Статичные страницы

Создадим такое дерево маршрутов:

/page1/page2/page3

Как это выглядит:

/app - Корень
/app/page.jsx - Главная страница
/app/page1/page.jsx- Корневая страница
/app/page1/page2/page.jsx- Лист 2 уровня
/app/page1/page2/page3/page.jsx- Лист 3 уровня

Таким образом строят любые уровни вложенности страниц. Все что только мы сами хотим.

Можно так же сделать страницу без отображения, которая будет открываться по пути

/lists/list1

Структура каталогов:

/app/lists/list1/page.jsx

Группы маршрутов

Иногда бывает нужно объединить маршруты в группы, но чтобы папка не учавствовала в парсинге url. Для этого папку оборачивают в (), для более удобной группировки.

Например, нужно разделить приложение на модули с адресами

/payments
/education
/blog

Структура будет такой:

/app/(modules)/(blog)/blog/page.jsx
/app/(modules)/(education)/education/page.jsx
/app/(modules)/(payments)/payments/page.jsx

Каждый модуль лежит в своей папке, что очень удобно.

Динамический маршрут

Если нужно например вывести определенную сущность для этого нам поможет динамический маршрут.

Например, вывести что-то по id

/dynamic/1
/dynamic/456456546
/dynamic/id-from-table

Структура будет такой

/app/dynamic/[id]/page.jsx

Сама страница page.jsx

Экспорт должен быть именно default

//page.jsx
// params - это объект
export default function Dinamic({params}) {
  return <h1>dynamic {params.id}</h1>
}
//{"id":"1"}
// или вот так, что более удобно
export default function Dinamic({params: {id}}) {
    return <h1>dynamic {id}</h1>
}

Но, что делать если у нас несколько динамических параметров.

/d/123/567/dfg/wet/5678/234

Структура:

/app/d/[...params]/page.jsx

Удобно распечатать что пришло {JSON.stringify(params)}

// page.jsx
export default function Params({params}) {
    return <h1>params {JSON.stringify(params)}</h1>
}
//Получам массив {"params":["123","567","dfg","wet","5678","234"]}

Но если перейти просто в d мы увидим 404 ошибку, чтобы этого избежать нужно добавить дополнительные скобки в путь

/app/d/[[...params]]/page.jsx

Теперь ошибки не будет, получим страницу без параметров.

Параллельные маршруты

Есть такая штука как параллельные маршруты. Два или более маршрута выводятся параллельно на странице.

Структура

/app/@par1/page.jsx
/app/@par2/page.jsx

И в layout выводим эти маршруты

export default function RootLayout({ children, par1, par2}) {
  return (
    <html lang="en">
      <body>
      {par1}
      {par2}
      {children}
      </body>
    </html>
  )
}

Получается, что на всех страницах будет выводиться информация с этих маршрутов. Мне правда пришлось перезапустить dev server

Навигация

Для более удобной навигации по страницам добавим меню.

Навигация в клиентской части идет с помощью компонента Link

import Link from "next/link";

export default function Page() {
  return <>
    <ul>
      <li><Link href="/">main page</Link></li>
      <li><Link href="/page1">page 1</Link></li>
      <li><Link href="/page1/page2">page 2</Link></li>
      <li><Link href="/page1/page2/page3">page 3</Link></li>
      <li><Link href="/lists/list1">list1</Link></li>
      <li><Link href="/dynamic/1">d 1</Link></li>
      <li><Link href="/dynamic/456456">d 3453454</Link></li>
      <li><Link href="/d/123/123/456/546">Динамические параметры</Link></li>
      <li><Link href="/blog">blog</Link></li>
      <li><Link href="/education">education</Link></li>
      <li><Link href="/payments">payments</Link></li>
    </ul>
  </>
}

Игнор в роутинге

/_lib -  такая папка полностью игнорируется в роутинге

Возник вопрос или предложение пиши на почту alexsey_89@bk.ru или в Телеграмм канал

Дата публикации: 06 Апреля 2024 г.

Содержание


Наверх

Последнее изменение страницы: 07 Апреля 2024 г.