6 ответов
App Router с Server Components - да, это действительно правильный путь сейчас, но многие люди упускают из виду важность продуманной стратегии fetching данных с самого начала - если ты начнёшь разбрасывать fetch-запросы везде без чёткого паттерна (кеширование, revalidation, client vs server), потом будет сплошной беспорядок, который сложно рефакторить. Стоит уделить время на этапе инициализации проекта, чтобы определить, как будут двигаться твои данные.
нет одной "лучшей" формы, потому что это зависит от размера и типа проекта, но большинство используют app router с server components, typescript и организуют код по фичам вместо группировки по типам файлов - это делает проект более масштабируемым и не превращается в кашу, когда он растёт.
Next.js 2026 находится в стабильной точке с consolidated app router, но правда в том, что много людей структурирует проекты плохо, потому что не думает о масштабируемости с самого начала. Когда ты начинаешь, легко попасть в ловушку смешивания серверной логики с клиентскими компонентами, а потом становится кошмаром пытаться всё рефакторить. Хорошо работает разделение папок не только по features, но особенно наличие чёткой структуры того, откуда фетчатся и обрабатываются данные.
Одно практичное, что мало кто упоминает: создать централизованный конфиг-файл для переменных окружения и endpoints с самого начала. Это не glamourный подход, но потом избегаешь монструозного дублирования. Например, вместо того чтобы разбросать URL API по разным файлам, иметь `src/config/api.ts`, который ты импортируешь везде, экономит часы. Также стоит рано подумать о том, как ты будешь работать с кешированием данных и revalidation - Next.js предлагает несколько опций (ISR, revalidateTag и т.д.), но нужно выбирать на основе того, что тебе реально нужно, а не копировать то, что видел в туториале.
Сама структура папок может следовать паттернам вроде `(group)` для связанных маршрутов, `_components` для приватных компонентов фичи и `_lib` для локальных утилит. Критически важный момент - держать server components как стандарт и делать client components только когда реально нужна интерактивность - это само по себе решает половину проблем с производительностью.
Какой размер у твоего проекта - маленький MVP или что-то, что будет расти? В предыдущем разговоре не упомянули наблюдаемость с самого начала - логирование, мониторинг производительности, всё эти штуки, которые кажутся скучными, но имеют огромное значение, когда проект начинает расти. Большинство людей об этом думают только когда уже есть проблемы, а потом уже намного сложнее рефакторить.
Что действительно работает - отделить бизнес-логику от интерфейса с самого начала. Создай папку `lib` или `core` с чистыми функциями, которые ничего не знают про React, и переиспользуй их в server components, client components, API routes - везде. Большинство всё лепит прямо в компоненты, а потом застревает. Ещё практичный совет: если проект будет расти, сразу добавь схему валидации (Zod, Yup, что угодно) между запросом и базой данных - сэкономишь тонны отладки потом, когда пытаешься понять, почему поле пришло undefined где-то в случайном месте флоу.
Когда я структурирую проект, то что реально работает - это установить чёткие соглашения с самого первого дня: папки по фичам внутри app, но с отдельным слоем сервисов для переиспользуемой логики! Все застревают в обсуждениях app router против pages router, но реальная проблема появляется потом, когда у тебя уже 50 страниц и никто не знает, куда положить утилиту валидации. Мой совет - создать паттерн: `app/(features)/[feature]/(routes)/page.tsx`, `lib/services/` для тяжёлой логики и `lib/utils/` для простых вещей. Потом потрать время на настройку надёжного `.env` и валидацию переменных при старте приложения - это спасает тебя от раскаяния в продакшене!
Ваш ответ
Войдите, чтобы ответить.