Перейти к содержимому

Next.js: Обзор

Добро пожаловать в раздел Next.js — самого популярного React-фреймворка для создания полноценных веб-приложений! 🎉

Если React — это движок автомобиля, то Next.js — это весь автомобиль: с кузовом, колёсами, навигацией и круиз-контролем. Тебе не нужно собирать его с нуля — он уже готов к поездке.


Представь: ты написал крутое React-приложение. Открываешь его в браузере — и видишь… пустой HTML с одним <div id="root">. Поисковики видят то же самое. Первая загрузка медленная. Нет маршрутизации из коробки. Нет серверной части.

Next.js решает все эти проблемы:

Проблема React SPA │ Решение Next.js
────────────────────────────┼──────────────────────────────────
Пустой HTML для SEO │ Server-Side Rendering / SSG
Медленная первая загрузка │ Pre-rendering + Streaming
Нет роутера │ File-based routing
Нет серверной части │ API Routes + Server Actions
Сложная настройка сборки │ Zero-config Webpack/Turbopack
Нет оптимизации изображений │ next/image с автооптимизацией
Нет оптимизации шрифтов │ next/font с preloading

КритерийReact SPANext.jsRemixAstro
РендерингCSR onlyCSR+SSR+SSG+ISRSSR+CSRMPA+Islands
МаршрутизацияВручную (React Router)File-based ✅File-based ✅File-based ✅
SEO❌ Сложно✅ Отлично✅ Отлично✅ Отлично
Серверная часть❌ Нет✅ API/Actions✅ Loaders/Actions⚠️ Endpoints
Производительность⚠️ Средне✅ Отлично✅ Отлично✅✅ Максимум
Экосистема✅✅ Огромная✅✅ Огромная⚠️ Растёт⚠️ Растёт
Кривая обученияНизкаяСредняяСредняяНизкая
Full-stack⚠️
React Server Components
Vercel интеграция⚠️✅✅ Родная⚠️
КомпанииВсеVercel, TikTok, TwitchShopifyCloudflare

Next.js — твой выбор, если:

  • Нужен SEO (блог, лендинг, e-commerce, новостной сайт)
  • Строишь full-stack приложение на одном стеке
  • Хочешь React, но с серверным рендерингом
  • Нужна гибкость: часть страниц статические, часть — динамические
  • Деплоишь на Vercel (zero-config деплой за минуты)

Plain React SPA — если:

  • Делаешь внутренний инструмент (дашборд, CRM) — SEO не нужен
  • Приложение за логином — боты его не видят
  • Нужна максимальная простота настройки

Remix — если:

  • Фокус на веб-стандартах (progressive enhancement)
  • Нравится модель загрузчиков данных (loaders/actions)
  • Shopify-экосистема

Astro — если:

  • Максимум производительности (почти 0 JS на клиенте)
  • Контентные сайты (документация, блоги)
  • Хочешь использовать компоненты React, Vue, Svelte вместе

Next.js 15 вышел в октябре 2024 года и принёс важные изменения:

// 1. React 19 поддержка
// React 19 Compiler — автоматическая мемоизация!
// Больше не нужны useMemo/useCallback в большинстве случаев
// 2. Async Request APIs (BREAKING CHANGE!)
// Было (Next.js 14):
const { cookies, headers, params } = { cookies: cookies(), headers: headers() };
// Стало (Next.js 15):
const cookieStore = await cookies();
const headersList = await headers();
const { slug } = await params; // params теперь async!
// 3. Turbopack стабилен для dev
// next dev теперь использует Turbopack по умолчанию
// В 5 раз быстрее Webpack для hot reload!
// 4. unstable_after() — код после ответа
import { unstable_after as after } from 'next/server';
export async function GET() {
const data = await fetchData();
after(async () => {
// Выполняется после отправки ответа клиенту
await logAnalytics(data);
await updateCache();
});
return Response.json(data);
}
// 5. Улучшенный caching (Breaking change!)
// fetch() теперь НЕ кешируется по умолчанию
// Нужно явно указывать: fetch(url, { cache: 'force-cache' })
// 6. Form component
import Form from 'next/form';
// <Form action="/search"> — с prefetching и soft navigation

#УрокТема
1Что такое Next.jsИстория, концепции, ключевые фичи, Next.js 15
2App Router vs Pages RouterРазница, миграция, когда что использовать
3Файловая маршрутизацияСтатика, динамика, catch-all, группы, параллельные роуты
4Layouts и TemplatesRoot layout, вложенные, template.tsx, метаданные
5Server vs Client ComponentsRSC модель, ‘use client’, гидрация, паттерны
6Получение данныхfetch(), параллельно, кеш, ревалидация, Suspense
7Статическая генерация (SSG)generateStaticParams, fallback, когда использовать
8Server-Side RenderingДинамический рендеринг, streaming, сравнение
9ISR — Инкрементальная регенерацияrevalidate, on-demand, теги, stale-while-revalidate
10Loading и Error состоянияloading.tsx, error.tsx, Suspense boundaries
11Route Handlers (API)GET/POST/PUT/DELETE, middleware, cookies
12Server Actions’use server’, формы, мутации, оптимистичные апдейты
13MiddlewareEdge middleware, matcher, auth, redirects
14Metadata и SEOStatic/dynamic metadata, OG, Twitter cards, sitemap
15Оптимизация изображенийnext/image, форматы, lazy loading, blur placeholder
16Шрифты и стилиnext/font, CSS Modules, Tailwind, styled-components
17АутентификацияNextAuth.js v5, JWT, сессии, защита роутов
18КешированиеData cache, Router cache, Full Route cache, revalidation
19Parallel и Intercepting Routes@slots, (.)intercept, модальные окна
20Динамические маршруты[slug], […rest], generateStaticParams, notFound()
21Интернационализацияi18n routing, locale detection, next-intl
22Переменные окружения.env файлы, NEXT_PUBLIC_, серверные секреты
23ТестированиеJest, React Testing Library, Playwright, Vitest
24ПроизводительностьCore Web Vitals, Bundle analyzer, Lighthouse
25Деплой на VercelZero-config, preview deploys, Edge Network
26Деплой в DockerDockerfile, standalone output, self-hosted
27Monorepo и TurborepoTurborepo, workspace, shared packages
28Паттерны проектированияFeature folders, Data fetching patterns, Composition
29Миграция Pages → App RouterПошаговая миграция, coexistence, gotchas
30Next.js 15: новые возможностиПолный разбор всех нововведений

Новичок в Next.js?
└─► Уроки 1-5: Основы (роутинг, компоненты, рендеринг)
└─► Уроки 6-9: Данные (fetching, SSG, SSR, ISR)
└─► Уроки 10-13: API (handlers, actions, middleware)
└─► Уроки 14-16: UX (SEO, изображения, шрифты)
└─► Уроки 17-20: Advanced (auth, кеш, сложные роуты)
└─► Уроки 21-30: Pro (i18n, тесты, деплой, паттерны)

Совет: Не пытайся выучить всё сразу! Первые 5 уроков дают тебе 80% того, что нужно для большинства проектов. Остальное — по мере необходимости.


Окно терминала
npx create-next-app@latest my-app
# Вопросы при создании:
# ✔ Would you like to use TypeScript? › Yes
# ✔ Would you like to use ESLint? › Yes
# ✔ Would you like to use Tailwind CSS? › Yes
# ✔ Would you like your code inside a `src/` directory? › No
# ✔ Would you like to use App Router? › Yes (рекомендуется!)
# ✔ Would you like to use Turbopack for next dev? › Yes
# ✔ Would you like to customize the import alias? › No
cd my-app
npm run dev
# Открой http://localhost:3000 🎉

my-next-app/
├── app/ # App Router (Next.js 13+)
│ ├── layout.tsx # Root layout — обёртка всего приложения
│ ├── page.tsx # Главная страница /
│ ├── about/
│ │ └── page.tsx # Страница /about
│ ├── blog/
│ │ ├── page.tsx # Страница /blog
│ │ └── [slug]/
│ │ └── page.tsx # Страница /blog/любой-слаг
│ ├── api/
│ │ └── users/
│ │ └── route.ts # API endpoint /api/users
│ └── globals.css
├── components/ # Переиспользуемые компоненты
├── lib/ # Утилиты, хелперы
├── public/ # Статические файлы
├── next.config.mjs # Конфигурация Next.js
├── package.json
└── tsconfig.json

💡 Ключевые концепции (краткий глоссарий)

Заголовок раздела «💡 Ключевые концепции (краткий глоссарий)»
ТерминОбъяснение
RSCReact Server Components — компоненты, рендерящиеся только на сервере
SSRServer-Side Rendering — рендеринг HTML на сервере при каждом запросе
SSGStatic Site Generation — генерация HTML при сборке проекта
ISRIncremental Static Regeneration — SSG с периодическим обновлением
CSRClient-Side Rendering — рендеринг в браузере (обычный React)
App RouterНовая система маршрутизации (папка app/), Next.js 13+
Pages RouterСтарая система маршрутизации (папка pages/), Next.js 1-12
HydrationПроцесс “оживления” статического HTML на клиенте
StreamingПостепенная отправка HTML с сервера по частям
Edge RuntimeВыполнение кода на CDN-узлах, ближе к пользователю

Поехали! 🚀 Начни с первого урока — он расставит все точки над i.