Pytania rekrutacyjne z zarządzania stanem (Senior) z odpowiedziami
75 pytań na rozmowę rekrutacyjną z tematu Zarządzanie stanem (Senior) - z poprawnymi odpowiedziami, wyjaśnieniami i linkami do dokumentacji.
Rozwiąż ten test- 1.Dlaczego Redux, Zustand i podobne biblioteki subskrybują przez
useSyncExternalStore? - 2.Co jest nie tak z tym
getSnapshot? - 3.Jaka jest różnica między modelem „subskrypcji selektora” (Redux, Zustand) a Contextem?
- 4.Gdzie w aplikacji z routingiem najlepiej trzymać stan filtra listy (wyszukiwanie, sortowanie, strona)?
- 5.Jaka klasyfikacja stanu pomaga wybierać narzędzia w dużej aplikacji?
- 6.Jak sprawić, by konsumenci
CartContextużywający tylko akcji w styludispatchnie renderowali się ponownie? - 7.Dlaczego providery Contextu w Next.js App Router wydziela się do osobnego komponentu klienckiego?
- 8.Dlaczego „jeden duży AppContext z całym stanem” uważa się za antywzorzec?
- 9.Co dodaje
use(Context)w React 19 w porównaniu zuseContext? - 10.Do czego służy
createListenerMiddleware? - 11.Co dodaje
combineSlicesw Redux Toolkit? - 12.Dlaczego do store'a Reduxa nie wkłada się promise'ów, instancji klas i funkcji?
- 13.Czego potrzebuje zmemoizowany selektor z
createSelector, by był wydajny z argumentami? - 14.Dlaczego Redux zaleca strukturę „ducks”/folderów według funkcji z
createSlice? - 15.Reducer dla
orders/placedmusi też wyczyścić slice koszyka. Jak zrobić to idiomatycznie? - 16.Czym grozi store Zustand na poziomie modułu przy SSR (Next.js)?
- 17.Jak zapisywać tylko część pól store'a Zustand i obsługiwać zmiany schematu?
- 18.Jak reagować na zmiany w Zustand poza Reactem (np. synchronizować z SDK analityki)?
- 19.Co daje store'owi Zustand middleware
devtools? - 20.Zustand czy Redux Toolkit: kiedy RTK jest mocniejszym wyborem?
- 21.Jak zaimplementować optymistyczną aktualizację przez cache w TanStack Query?
- 22.Czym jest structural sharing w TanStack Query?
- 23.Dlaczego zaleca się fabryki kluczy zapytań?
- 24.Jak przekazać dane TanStack Query pobrane wcześniej na serwerze do komponentów klienckich w Next.js App Router?
- 25.Dlaczego na serwerze nie wolno tworzyć jednego globalnego
QueryClientdla wszystkich żądań? - 26.Co zmienia
useSuspenseQuery? - 27.Co trzeba skonfigurować dla
useInfiniteQuery? - 28.Jak w TanStack Query anulować trwające żądanie, gdy przestało być potrzebne?
- 29.Co daje opcja
selectwuseQuery? - 30.Jak zrobić optymistyczną aktualizację w RTK Query?
- 31.Jak RTK Query decyduje, które zapytania pobrać ponownie przy tagach z id?
- 32.Do czego w endpoincie RTK Query używa się
transformResponse? - 33.Jak zapisać wynik mutacji bezpośrednio do zapytania w cache bez ponownego pobierania (aktualizacja pesymistyczna)?
- 34.Czy RTK Query i stan
createSlicemogą współistnieć w jednym store? - 35.Jak zrobić optymistyczną aktualizację przez
mutatew SWR? - 36.Co daje
useSWRMutationw porównaniu z wywołaniemfetch, a potemmutate? - 37.Jak SWR unika renderu komponentu, gdy zmieniają się niezwiązane z nim pola odpowiedzi?
- 38.Jak przekazać do SWR dane pobrane na serwerze, by były dostępne przy pierwszym renderze klienta?
- 39.SWR czy TanStack Query: które porównanie jest uczciwe?
- 40.Dlaczego mówi się, że loadery tras eliminują „kaskady żądań” w porównaniu z pobieraniem w
useEffect? - 41.Jak nie uruchamiać ponownie loadera po każdym action na stronie?
- 42.Jak zbudować optymistyczne UI z fetcherem w React Router?
- 43.Jak strumieniować wolne, niekrytyczne dane z loadera React Router?
- 44.Czy przy loaderach React Router potrzebna jest biblioteka cache klienta (TanStack Query)?
- 45.Jak błędy walidacji z
actionReact Router powinny trafiać do formularza? - 46.Aplikacja legacy trzyma odpowiedzi API w slice'ach Reduxa z ręcznymi flagami ładowania. Jaka migracja jest pragmatyczna?
- 47.Jak zsynchronizować stan klienta dwóch kart przeglądarki (np. wylogowanie w jednej karcie)?
- 48.Jakie jest główne ryzyko kopiowania danych serwerowych z
useQuerydo store'a Zustand/Redux? - 49.Jakie podejście sprawia, że logikę stanu najłatwiej testować jednostkowo, niezależnie od biblioteki?
- 50.Kiedy maszyna stanów (np. XState) jest lepsza niż reducer z flagami?
- 51.Jak zapisywać aktualizacje z WebSocketa do wpisu bufora RTK Query?
- 52.Jak zrealizować nieskończone przewijanie z jednym wpisem bufora RTK Query?
- 53.Co daje utrwalanie bufora TanStack Query (
persistQueryClient) i na co uważać? - 54.Co dzieje się z zapytaniami TanStack Query, gdy przeglądarka przechodzi w offline (domyślnie
networkMode: 'online')? - 55.Co jest nie tak z tą aktualizacją bufora?
- 56.Jak konfigurować komponenty z TanStack Query w testach?
- 57.Jak dać każdej instancji złożonego widżetu własny store Zustand?
- 58.Jak reagować na bardzo częste zmiany w Zustand (np. pozycję wskaźnika 60 razy na sekundę) bez ponownych renderów?
- 59.Jak wydajnie zrealizować undo/redo dla stanu dużego dokumentu?
- 60.Po co walidować stan z URL (parametry wyszukiwania) schematem?
- 61.Po co wysyłać klucz idempotencji z optymistycznym żądaniem „utwórz zamówienie”, które może zostać ponowione?
- 62.Jak pokazać globalny wskaźnik dla wszystkich trwających fetcherów React Router (np. wielu przycisków „lubię”)?
- 63.Co daje opcja
providerdla własnego bufora w SWR? - 64.Co zwykle zmienia się dla klienckich bibliotek stanu, gdy React Server Components pobierają dane na serwerze?
- 65.Dlaczego React Redux implementuje
useSelectornauseSyncExternalStoreWithSelector? - 66.Jak niezależnie wdrażane mikrofrontendy powinny dzielić stan, np. bieżącego użytkownika?
- 67.Kiedy pomaga
useSelector(selector, shallowEqual)? - 68.Jakie podejście pasuje do wspólnej edycji, gdy wielu użytkowników zmienia jeden dokument offline i online?
- 69.Jak zaktualizować edytowane zadanie we wszystkich buforowanych listach (przefiltrowanych widokach) naraz?
- 70.Dlaczego zależne zapytania mogą tworzyć kaskadę i jak ją skrócić?
- 71.Czym różni się
staleTime: InfinityodrefetchOnMount: false? - 72.Kiedy szyna zdarzeń jest lepsza od wspólnego stanu do komunikacji między funkcjami?
- 73.Po co modelować stan asynchroniczny unią dyskryminowaną zamiast osobnych pól?
- 74.Co jest nie tak z
providesTags: (result) => result.map(({ id }) => ({ type: "Post", id }))? - 75.Gdzie przechowywać niezapisany szkic długiego formularza, by przetrwał przeładowanie lub awarię?