NextJS - это фреймворк, построенный на базе React, который генерирует код заранее на сервере, чтобы отобразить его пользователю. Так же он правит сео-оптимизацию.
Преимущества
Тег <Img>, в который некст принимает изображение и на выходе генерирует оптимизированное изображение
Удобный роутинг с хранением всех страниц в одной папке и лёгким перемещением через тег <Link>
SSR и SSG генерации
Так же можно поднять серверное API внутри маленького проекта
Контроль мета-тегов через компонент <HEAD>
Установка проекта
Разбор структуры
pages - папка с API проекта и его страницами
public - папка с ресурсами проекта
styles - стили проекта
Проект, который будем делать
Роутинг
Первым делом можно отметить возможность создания динамических страниц. В страницу подкладывается переменная для генерации её под определённый подставленный объект.
Шаблон записывается в [] скобочках
Пропсы компонент App получает из кастомного документа _document.jsx, который можно создать для определения метаданных наших страниц
_app.js
Компонент Head
Для создания Head под каждую страницу, можно выделить компонент, который будет сохранять в себе метаданные
Примерно в этом месте мы можем реализовать все сторонние компоненты и дополнения для системы
Это сам компонент метаданных в приложении
meta.jsx
И так применяем в приложении
Кастомный document.js
Создаём в качестве страниц наше представление документа. Оно показывает, в каком порядке будут располагаться элементы на странице
Здесь сначала располагается начальная структура документа, а уже затем можно добавлять остальные элементы страницы (те же шрифты)
_document.js
И так же поменяем шрифт на странице в глобальных стилях
Установка SCSS
Просто устанавливаем модуль сасс
Переименовываем файлы в scss
И далее меняем импорты
Создание своего API на next.js
data.js
Это общий запрос, который выполняется при запросе без определённого id карточки
index.js
Сейчас мы можем себе позволить проверить получаемый id карточки
[id].js
В ответе мы получаем:
В логе мы получаем:
И вот так будет выглядеть выполняемый запрос при вводе карточки. Он будет возвращать только данные по карточке
[id].js
getServerSideProps
Мы можем получать через getServerSideProps свойства с сервера, чтобы применять их у себя на странице. Это не самый эффективный вариант для работы приложения, так как на каждый запрос пользователя будет напрягаться сервер.
Более актуальным вариантом взаимодействия с сервером является getStaticProps
getStaticProps
Уже getStaticProps подгружает данные для клиента при загрузке страницы ровно один раз и выдаёт ему уже сформированные данные.
getStaticPaths
Вкупе с методом выше так же используют getStaticPaths, который подгружает пути данных
Вот так выглядит структура:
Первым делом заменим в индексе getServerSideProps на getStaticProps и добавим параметр revalidate, чтобы производить валидацю данных
index.js
И теперь создадим страницу, которая будет генерироваться на основании переданных нами данных.
То есть по запросу id, который будет возвращать определённую карту, будет выводиться страница, которая выведет данную карту
[id].jsx
И теперь по запросу http://localhost:3000/card/first-card минуя api мы можем получить интересующие нас данные
Tailwind CSS
tailwind.config.js
globals.scss
Практика Next.js
Так выглядит структура:
Это компонент отдельной карточки. Тут используются:
Стили как через className, так и через style
Тег некста <Link>
Тег некста <Image>
app > cards > CardItem.jsx
Тут уже мы будем выводить страницу по переходу на отдельную определённую карточку по клику
pages > card > [id].jsx
Чтобы мы могли загружать с помощью тега <Image> изображения со сторонних ресурсов, нужно добавить их в домены внутри конфига
Чтобы увидеть изменения на сайте при изменениях в конфиге, нужно перезапустить сборку в консоли
next.config.js
Тут мы выводим все наши карты на страницу из массива переданных карт в компонент Home
pages > index.js
И вот так будет выглядеть итоговая страница:
Выводятся все карточки, которые добавим в data.js
Переход по карточкам работать не будет (для этого нужно пилить отдельно бэк)