Питання на співбесіді з Next.js з відповідями
App Router, Server і Client Components, рендеринг, кешування, Server Actions, Next.js 16.
225 запитань для співбесіди з теми Next.js з відповідями й поясненнями - рівні Junior, Middle і Senior. Приклади запитань, онлайн-тести й задачі на код.
- App Router
- RSC
- Caching
- Server Actions
Запитання за рівнями
Junior
Базові поняття та синтаксис · 50 запитань
Middle
Практика, нюанси й оптимізація · 50 запитань
Senior
Архітектура, внутрішня будова, edge cases · 50 запитань
Приклади запитань
Кілька запитань із кожного рівня з правильною відповіддю й поясненням.
Next.js · Junior
- Що таке colocation в App Router?
Правильна відповідь: Зберігання компонентів і утиліт поруч із маршрутами всередині
app/Файли в
app/стають публічними лише черезpageабоroute. Тому поруч ізpage.tsxбезпечно зберігати компоненти, хуки, стилі й тести конкретного маршруту. Для явності використовують приватні папки_componentsабо тримають спільний код уsrc/позаapp. - Що таке Next.js?
Правильна відповідь: React-фреймворк із маршрутизацією, серверним рендерингом і оптимізаціями
Next.js побудований на React і додає те, чого немає в бібліотеці: файлову маршрутизацію, серверний і статичний рендеринг, Server Components і Server Functions, оптимізацію зображень і шрифтів, збирання й деплой. Компоненти пишуться звичайним React.
- Як в App Router створити сторінку за адресою
/about?Правильна відповідь: Створити файл
app/about/page.tsxз default-експортом компонентаМаршрут задається папкою, а публічною сторінкою її робить файл
page.tsx(або.js). Безpageпапка недоступна за URL - у ній можна зберігати компоненти (colocation). Конфігурації маршрутів уnext.configнемає. Файлpages/about.tsx- це домовленість старого Pages Router. - Чим
layout.tsxвідрізняється відpage.tsx?Правильна відповідь: Layout обгортає сторінки й зберігає стан під час навігації
Layout отримує
childrenі спільний для вкладених маршрутів UI (шапка, сайдбар). Під час переходу між дочірніми сторінками layout не перемонтовується: його стан і DOM зберігаються, рендериться лише змінена частина. І layout, і page за замовчуванням - Server Components.
Next.js · Middle
- Що таке Server Function (Server Action) у Next.js?
Правильна відповідь: Асинхронна функція з
'use server', яку можна викликати з клієнтаДиректива
'use server'перетворює функцію на серверну, а Next.js створює для неї ендпоінт. Її можна передати в<form action>або викликати з клієнтського обробника. Виклик іде POST-запитом. Server Actions - це Server Functions, що використовуються для мутацій, часто з подальшою ревалідацією кешу. - Що дає
<form action={createPost}>із Server Action порівняно зonSubmit+fetch?Правильна відповідь: Форма працює й до завантаження JS (progressive enhancement), без API-роуту
Server Action отримує
FormDataнапряму, не треба писати Route Handler і клієнтськийfetch. Якщо форму відрендерив серверний компонент, вона надішлеться навіть до гідратації. Валідацію однаково пишуть самі (наприклад, Zod). Стан надсилання показують черезuseActionStateабоuseFormStatus. - Що робить
revalidatePath('/blog')після мутації?Правильна відповідь: Позначає закешовані дані й UI маршруту
/blogяк застаріліНаступний запит до
/blogотримає свіжі дані. Якщо викликати в Server Action, оновлений UI повернеться одразу у відповіді на дію. Для точкової інвалідації даних, що використовуються на багатьох сторінках, зручніші теги (cacheTag+revalidateTag/updateTag). - Чим
updateTagвідрізняється відrevalidateTagу Next.js 16?Правильна відповідь:
updateTagодразу анулює кеш (read-your-writes),revalidateTag- stale-while-revalidateupdateTagдоступний лише в Server Actions: користувач, що змінив дані, одразу побачить зміни.revalidateTag(tag, 'max')позначає дані застарілими: відвідувачі бачать старе, поки у фоні готується нове - підходить для блогів і каталогів. У Next.js 16 уrevalidateTagобов'язковий другий аргумент - профільcacheLife.
Next.js · Senior
- Що таке RSC payload?
Правильна відповідь: Серіалізований результат рендеру Server Components із посиланнями на клієнтські
Payload містить відрендерене дерево серверних компонентів, місця для клієнтських компонентів із посиланнями на їхні JS-чанки та props для них. Під час першого завантаження він вбудований у HTML (для гідратації), а під час клієнтської навігації запитується окремо. Код серверних компонентів у браузер не потрапляє.
- Що відбувається під час клієнтського переходу за
<Link>в App Router?Правильна відповідь: Завантажується RSC payload нового сегмента, і React оновлює лише змінені частини
Роутер запитує payload (або бере попередньо завантажений із клієнтського кешу) і узгоджує його з поточним деревом: спільні layout зберігаються, клієнтський стан не втрачається. Якщо сегмент ще вантажиться, показується
loading.tsx. Повного перезавантаження документа не відбувається. - З
cacheComponents: truedev-оверлей показує «blocking route». Що це означає?Правильна відповідь: Некешовані дані читаються поза
<Suspense>і блокують статичну оболонкуЗ Cache Components кожна асинхронна робота має бути або закешована через
'use cache'(потрапить в оболонку), або обгорнута в<Suspense>(стримітиметься під час запиту). Інакше вся сторінка чекала б на дані. Це правило перевіряється під час розробки й збирання. - Чим
'use cache: remote'відрізняється від'use cache'?Правильна відповідь: Зберігає результат у віддаленому обробнику, спільному для всіх інстансів, ціною мережевої затримки
Звичайний
'use cache'за замовчуванням зберігає записи в пам'яті процесу (LRU), тому в serverless і за кількох інстансів кеш короткоживучий і не спільний.remoteвикористовує обробник ізcacheHandlers(Redis, KV платформи) - надійніше, але дорожче. Доступ до даних запиту дає'use cache: private', а неremote.
Збірні тести з цією темою
Запитання з кількох тем одразу - як на співбесіді на конкретну вакансію.
Задачі на код
Напишіть рішення просто в браузері - тести перевірять його одразу. Класика співбесід: debounce, throttle, deepClone, Promise.all, EventEmitter, LRU-кеш та інші.
Відкрити задачі →