Питання на співбесіді з керування станом (Senior) з відповідями
75 запитань для співбесіди з теми Керування станом (Senior) - з правильними відповідями, поясненнями й посиланнями на документацію.
Пройти цей тест- 1.Чому Redux, Zustand і схожі бібліотеки підписуються через
useSyncExternalStore? - 2.Що не так із цим
getSnapshot? - 3.У чому різниця між моделлю «підписка на селектор» (Redux, Zustand) і Context?
- 4.Де в застосунку з роутингом найкраще зберігати стан фільтра списку (пошук, сортування, сторінка)?
- 5.Яка класифікація стану допомагає вибирати інструменти у великому застосунку?
- 6.Як зробити, щоб споживачі
CartContext, які використовують лише дії в стиліdispatch, не перемальовувалися? - 7.Чому провайдери Context у Next.js App Router виносять в окремий клієнтський компонент?
- 8.Чому «один великий AppContext з усім станом» вважається антипатерном?
- 9.Що додає
use(Context)у React 19 порівняно зuseContext? - 10.Для чого потрібен
createListenerMiddleware? - 11.Що додає
combineSlicesу Redux Toolkit? - 12.Чому в Redux-стор не кладуть проміси, екземпляри класів і функції?
- 13.Що потрібно мемоізованому селектору з
createSelector, щоб він був ефективним з аргументами? - 14.Чому Redux рекомендує структуру «ducks»/папки за фічами з
createSlice? - 15.Редʼюсер для
orders/placedмає також очистити слайс кошика. Як це зробити ідіоматично? - 16.Чим небезпечний стор Zustand на рівні модуля під час SSR (Next.js)?
- 17.Як зберігати лише частину полів стору Zustand і обробляти зміни схеми?
- 18.Як реагувати на зміни Zustand поза React (наприклад, синхронізувати з SDK аналітики)?
- 19.Що дає стору Zustand middleware
devtools? - 20.Zustand чи Redux Toolkit: коли RTK - сильніший вибір?
- 21.Як реалізувати оптимістичне оновлення через кеш у TanStack Query?
- 22.Що таке structural sharing у TanStack Query?
- 23.Чому рекомендують фабрики ключів запитів?
- 24.Як передати попередньо завантажені на сервері дані TanStack Query клієнтським компонентам у Next.js App Router?
- 25.Чому на сервері не можна створювати один глобальний
QueryClientдля всіх запитів? - 26.Що змінює
useSuspenseQuery? - 27.Що потрібно налаштувати для
useInfiniteQuery? - 28.Як у TanStack Query скасувати запит, що виконується, коли він став непотрібним?
- 29.Що дає опція
selectуuseQuery? - 30.Як зробити оптимістичне оновлення в RTK Query?
- 31.Як RTK Query вирішує, які запити перезапитати за тегів з id?
- 32.Для чого в ендпоінті RTK Query використовують
transformResponse? - 33.Як записати результат мутації прямо в закешований запит без перезапиту (песимістичне оновлення)?
- 34.Чи можуть RTK Query і стан
createSliceспівіснувати в одному сторі? - 35.Як зробити оптимістичне оновлення через
mutateу SWR? - 36.Що дає
useSWRMutationпорівняно з викликомfetch, а потімmutate? - 37.Як SWR уникає ререндера компонента, коли змінюються не пов'язані з ним поля відповіді?
- 38.Як передати в SWR дані, завантажені на сервері, щоб вони були в першого клієнтського рендера?
- 39.SWR чи TanStack Query: яке порівняння справедливе?
- 40.Чому кажуть, що loader'и маршрутів прибирають «водоспади запитів» порівняно із завантаженням у
useEffect? - 41.Як не перезапускати loader після кожного action на сторінці?
- 42.Як побудувати оптимістичний UI з fetcher у React Router?
- 43.Як стрімити повільні некритичні дані з loader'а React Router?
- 44.Чи потрібна бібліотека клієнтського кешу (TanStack Query) за наявності loader'ів React Router?
- 45.Як помилки валідації з
actionReact Router мають потрапляти у форму? - 46.Легасі-застосунок зберігає відповіді API в Redux-слайсах із ручними прапорцями завантаження. Яка міграція прагматична?
- 47.Як синхронізувати клієнтський стан двох вкладок браузера (наприклад, вихід в одній вкладці)?
- 48.Який головний ризик копіювання серверних даних з
useQueryу стор Zustand/Redux? - 49.Який підхід робить логіку стану найпростішою для юніт-тестів незалежно від бібліотеки?
- 50.Коли скінченний автомат (наприклад, XState) кращий за редʼюсер із прапорцями?
- 51.Як записувати оновлення з WebSocket у запис кешу RTK Query?
- 52.Як реалізувати нескінченне прокручування з одним записом кешу RTK Query?
- 53.Що дає збереження кешу TanStack Query (
persistQueryClient) і за чим треба стежити? - 54.Що відбувається із запитами TanStack Query, коли браузер переходить в офлайн (за замовчуванням
networkMode: 'online')? - 55.Що не так із цим оновленням кешу?
- 56.Як налаштовувати компоненти з TanStack Query в тестах?
- 57.Як дати кожному екземпляру складного віджета власний стор Zustand?
- 58.Як реагувати на дуже часті зміни Zustand (наприклад, позицію вказівника 60 разів на секунду) без перерендерів?
- 59.Як ефективно реалізувати undo/redo для стану великого документа?
- 60.Навіщо валідувати стан з URL (search-параметри) схемою?
- 61.Навіщо надсилати ключ ідемпотентності з оптимістичним запитом «створити замовлення», що може повторитися?
- 62.Як показати глобальний індикатор для всіх fetcher'ів React Router, що виконуються (наприклад, кількох кнопок «лайк»)?
- 63.Що дає опція
providerдля власного кешу в SWR? - 64.Що зазвичай змінюється для клієнтських бібліотек стану, коли React Server Components завантажують дані на сервері?
- 65.Чому React Redux реалізує
useSelectorповерхuseSyncExternalStoreWithSelector? - 66.Як незалежно задеплоєні мікрофронтенди мають ділити стан на кшталт поточного користувача?
- 67.Коли допомагає
useSelector(selector, shallowEqual)? - 68.Який підхід підходить для спільного редагування, коли кілька користувачів змінюють один документ офлайн і онлайн?
- 69.Як оновити відредаговану задачу в усіх закешованих списках (відфільтрованих представленнях) одразу?
- 70.Чому залежні запити можуть створити водоспад і як його скоротити?
- 71.Чим
staleTime: Infinityвідрізняється відrefetchOnMount: false? - 72.Коли шина подій краща за спільний стан для взаємодії фіч?
- 73.Навіщо моделювати асинхронний стан дискримінованим об'єднанням, а не окремими полями?
- 74.Що не так із
providesTags: (result) => result.map(({ id }) => ({ type: "Post", id }))? - 75.Де зберігати незбережену чернетку довгої форми, щоб вона пережила перезавантаження чи збій?