1. Введение в экосистему Next.js: установка, структура проекта и основы React Server Components
Введение в экосистему Next.js: установка, структура проекта и основы React Server Components
Добро пожаловать в курс по разработке современных веб-приложений на Next.js! Если вы уже знакомы с React, то, возможно, задавались вопросом: зачем нужен еще один инструмент поверх него? Если React — это библиотека для создания пользовательских интерфейсов (как двигатель), то Next.js — это полноценный фреймворк (как готовый автомобиль), который предоставляет структуру, правила и инструменты для создания готовых к продакшену приложений.
В этой первой статье мы разберем фундамент: как установить Next.js, как ориентироваться в файловой системе нового проекта и, самое главное, поймем концепцию React Server Components, которая кардинально меняет подход к разработке.
Почему Next.js?
React сам по себе великолепен, но он оставляет разработчику множество нерешенных вопросов: как настроить маршрутизацию? Как оптимизировать загрузку изображений? Как обеспечить SEO (поисковую оптимизацию)? Next.js решает эти проблемы «из коробки».
Основные преимущества:
* Гибридный рендеринг: Возможность рендерить страницы как на сервере, так и на клиенте. * Маршрутизация на основе файловой системы: Не нужно настраивать сложные конфигурации роутера, структура папок определяет URL. * Автоматическая оптимизация: Изображения, шрифты и скрипты оптимизируются автоматически для лучшей производительности.
Установка и создание первого проекта
Перед началом работы убедитесь, что на вашем компьютере установлен Node.js (рекомендуется версия 18.17.0 или выше). Вы можете проверить это, введя команду node -v в терминале.
Шаг 1: Инициализация проекта
Для создания нового приложения мы будем использовать утилиту create-next-app. Это официальный инструмент, который настраивает все необходимое окружение.
Откройте терминал и выполните следующую команду:
Здесь my-next-app — это название вашей папки с проектом.
Шаг 2: Настройка конфигурации
Во время установки терминал задаст вам несколько вопросов. Для целей этого курса мы рекомендуем следующие ответы:
src/ directory? — No (Для простоты будем работать в корне, но использование src тоже популярно).После завершения установки перейдите в папку проекта:
И запустите сервер разработки:
Теперь, открыв браузер по адресу http://localhost:3000, вы увидите стартовую страницу Next.js.
Структура проекта: App Router
С выходом Next.js 13 (и стабилизацией в 14-й версии) был представлен App Router. Это новая парадигма построения приложений, основанная на папке app. Давайте разберем структуру файлов, которую создал генератор.
!Структура файлов в стандартном проекте Next.js с использованием App Router.
Ключевые файлы и папки
app/: Главная папка вашего приложения. Все, что находится здесь, может быть частью маршрутизации.page.tsx: Этот файл отвечает за отображение контента по определенному маршруту. Файл app/page.tsx соответствует главной странице (/).
* layout.tsx: Этот файл определяет общую структуру (оболочку) для страниц. Корневой layout.tsx обязательно должен содержать теги <html> и <body>.
* globals.css: Глобальные стили, которые применяются ко всему приложению.
public/: Папка для статических файлов (изображения, шрифты, иконки), которые должны быть доступны напрямую из браузера. Например, файл public/logo.png будет доступен по адресу /logo.png.next.config.js (или .mjs): Файл конфигурации самого Next.js. Здесь настраиваются редиректы, переменные окружения и плагины.package.json: Список зависимостей и скриптов для запуска проекта.Как работает вложенность (Routing)
В Next.js файловая система — это и есть ваш роутер. Чтобы создать новый маршрут, например http://localhost:3000/about, вам нужно:
about внутри папки app.about создать файл page.tsx.Next.js автоматически распознает этот файл и создаст соответствующий маршрут.
React Server Components (RSC): Смена парадигмы
Это самая важная и сложная концепция для понимания в современном Next.js. Раньше (в классическом React) все компоненты были клиентскими: браузер скачивал пустой HTML, затем загружал огромный JS-файл, выполнял его и только потом отрисовывал интерфейс. Это называется Client-Side Rendering (CSR).
Next.js использует React Server Components (RSC). По умолчанию все компоненты в папке app являются Серверными Компонентами.
Что такое Серверный Компонент?
Серверный компонент рендерится только на сервере. Браузер получает уже готовый HTML. Код этого компонента (логика, импорты тяжелых библиотек) никогда не отправляется в браузер.
Преимущества Серверных Компонентов:
* Производительность: Меньше JavaScript отправляется клиенту. * Доступ к бэкенду: Вы можете обращаться к базе данных или файловой системе прямо внутри компонента. * Безопасность: Секретные ключи API и логика остаются на сервере.
Пример серверного компонента:
Обратите внимание: мы используем async/await прямо в компоненте. В обычном React так делать нельзя, но в Server Components — можно и нужно.
Клиентские Компоненты (Client Components)
Означает ли это, что мы больше не можем использовать хуки React, такие как useState или useEffect? Нет. Но серверные компоненты их не поддерживают, так как у сервера нет понятия «состояние браузера» или «клик мыши».
Если вам нужна интерактивность (обработчики событий onClick, onChange, хуки состояния), вам нужно явно объявить компонент как Клиентский.
Для этого используется директива 'use client' в самой первой строке файла.
!Разделение ответственности между серверными и клиентскими компонентами.
Когда использовать Server, а когда Client?
Чтобы не запутаться, используйте простое правило: По умолчанию всегда пишите Серверные Компоненты. Переключайтесь на Клиентские только тогда, когда это действительно необходимо.
| Характеристика | Server Component | Client Component |
| :--- | :--- | :--- |
| Доступ к базе данных | Да | Нет |
| Использование useState, useEffect | Нет | Да |
| Обработчики событий (onClick) | Нет | Да |
| Использование браузерных API (window, localStorage) | Нет | Да |
| Async/Await в компоненте | Да | Нет |
| Размер JS-бандла для клиента | 0 Кб | Зависит от кода |
Итоги
Мы успешно заложили фундамент для работы с Next.js. Теперь у вас есть установленный проект и понимание того, как структурированы файлы. Вы узнали, что Next.js использует файловую систему для маршрутизации и разделяет компоненты на серверные (для данных и разметки) и клиентские (для интерактивности).
В следующих статьях мы углубимся в создание сложной маршрутизации, навигацию между страницами и стилизацию нашего приложения.