8 питань
Питання на співбесіді з React
Питання рівня Junior
1. Чим props відрізняються від state у React?
Відповідь
Props компонент отримує від батька, і для нього вони лише для читання. State це внутрішні дані компонента, якими він керує сам через
useStateабоuseReducer. Зміна state або нових props спричиняє повторний рендер. Якщо дані можна обчислити з props, окремий state для них не потрібен.Додаткове питання: Чому не можна змінювати state напряму, наприклад
state.items.push(x)?2. Навіщо потрібен
keyпри рендері списків?Відповідь
keyдопомагає React зіставити елементи списку між рендерами і зрозуміти, що додали, видалили чи переставили. Ключ має бути стабільним і унікальним серед сусідів, найкраще id з даних. Індекс масиву як ключ ламає стан елементів і анімації, коли список сортують, фільтрують або вставляють елементи на початок. Без ключа React покаже попередження в консолі.Додаткове питання: Як можна навмисно скинути стан компонента за допомогою
key?3. Як працює
useEffectі що означає масив залежностей?Відповідь
useEffectзапускає побічний ефект після рендеру: запит, підписку, таймер. Без масиву залежностей ефект виконується після кожного рендеру, з порожнім масивом лише після монтування, а зі значеннями тоді, коли якесь із них змінилось. Функція, яку повертає ефект, це cleanup: React викликає її перед наступним запуском ефекту і при розмонтуванні. У cleanup відписуються, очищають таймери і скасовують запити.Додаткове питання: Чому в режимі розробки зі StrictMode ефект запускається двічі?
4. Що таке контрольовані та неконтрольовані поля форми?
Відповідь
У контрольованому полі значення зберігається в state і передається через
value, а зміни приходять черезonChange. Так React є єдиним джерелом правди, і легко робити валідацію чи форматування під час введення. У неконтрольованому полі значення живе в DOM, його читають черезrefабо з події submit, а початкове задають черезdefaultValue. Неконтрольовані поля простіші й рендеряться рідше, але гірше підходять для складної логіки.Додаткове питання: Що станеться, якщо передати
valueбезonChange?5. Як передати дані між двома сусідніми компонентами?
Відповідь
Спільний state піднімають до найближчого спільного батька і передають униз через props разом із функціями для його зміни. Якщо дані потрібні глибоко в дереві й прокидання props стає незручним, використовують Context. Context підходить для рідко змінних даних на кшталт теми чи поточного користувача. Для складного глобального стану беруть окрему бібліотеку, наприклад Zustand або Redux.
Додаткове питання: Чому зміна значення Context може спричинити зайві рендери?
Питання рівня Middle
1. Що змушує компонент рендеритися повторно?
Відповідь
Компонент рендериться знову, коли змінюється його state, коли рендериться батько або коли змінюється Context, який він читає. Рендер батька за замовчуванням рендерить усіх дітей, навіть якщо їхні props не змінились.
React.memoпропускає рендер, якщо props поверхнево рівні. Рендер ще не означає зміну DOM: React оновлює DOM лише там, де результат відрізняється.Додаткове питання: Чому
React.memoне допоможе, якщо передавати в props новий об'єкт на кожен рендер?2. Навіщо потрібні
useMemoіuseCallback? Коли їх не варто використовувати?Відповідь
useMemoзапам'ятовує результат обчислення, аuseCallbackсаму функцію, доки не зміняться залежності. Вони корисні для дорогих обчислень і для стабільних посилань, які передають уReact.memoкомпоненти або в залежностіuseEffect. Мемоізація має свою ціну: пам'ять і порівняння залежностей. Обгортати все підряд немає сенсу, спершу варто знайти реальну проблему в профайлері.Додаткове питання: Як React Compiler змінює потребу в ручній мемоізації?
3. Що таке reconciliation і як React вирішує, що оновити в DOM?
Відповідь
Reconciliation це процес порівняння нового дерева елементів із попереднім. React порівнює дерева евристично: якщо тип елемента на тому ж місці змінився, піддерево знищується і створюється заново разом зі станом. Якщо тип той самий, React оновлює лише змінені атрибути і рекурсивно йде в дітей. Для списків він зіставляє елементи за
key, а потім застосовує мінімальний набір змін до DOM.Додаткове питання: Чому оголошення компонента всередині іншого компонента скидає його стан на кожному рендері?
Тренуй ці питання
Вчи картки, відповідай текстом або голосом і отримуй оцінку AI. Потрібен вхід в акаунт.
Відповідай уголос і отримуй оцінку
Тут питання з еталонними відповідями. У застосунку ShortLesson ти відповідаєш сам, текстом або голосом, а AI оцінює відповідь за критеріями і ставить додаткове питання, як на справжній співбесіді.
Застосунок незабаром з'явиться в магазинах.