Monolit na Reduxie z sagami, który nikt nie chce dotykać
Panel dla sprzedawców ma 4 lata. Cały stan, łącznie z danymi z 60 endpointów, siedzi w Reduxie, a pobieranie danych robi 120 sag. Nowe funkcje powstają wolno, testy sag są kruche, a przy przełączaniu ekranów migają stare dane. Masz zaproponować kierunek na najbliższe pół roku.
Zanim rozwiniesz: powiedz na głos, jak byś to rozwiązał, i nazwij co najmniej jeden kompromis.
Moje rozwiązanie
Zapisuje się samo w tej przeglądarce. Kopię zrobisz na stronie Notatki.
Pokaż, czego szuka rekruter, i modelową odpowiedź
Co sprawdza rekruter
- Czy rozróżniasz stan serwerowy od stanu klienta
- Czy proponujesz migrację przyrostową zamiast przepisywania
- Czy umiesz zmierzyć postęp i ryzyko
- Czy myślisz o zespole: konwencje, review, wdrożenie ludzi
Odpowiedź seniora
Zaczynam od inwentaryzacji: dzielę zawartość store’a na cache danych z API i prawdziwy stan klienta. Zwykle okazuje się, że 80% to cache, a migające dane biorą się z ręcznie pisanego loading/error i braku kluczy zależnych od parametrów.
Decyzja: dane z API przenoszę do TanStack Query, a jeśli zespół chce zostać w ekosystemie Redux, do RTK Query. Stan klienta zostaje w Redux Toolkit albo trafia do Zustanda, jeśli zostanie go niewiele. Nowe ekrany od pierwszego dnia powstają w nowym podejściu. Stare migruję zasobami: jedno query zastępuje sagę i slice, a dopóki stary kod czyta dane ze store’a, zapisuję je tam w onSuccess. Każdy krok jest osobnym, wdrażalnym PR-em za feature flagą.
Mierzę liczbę sag i slice’ów z danymi API, błędy w Sentry i czas dostarczania funkcji. Zespołowi daję wzorcowy moduł, ADR z uzasadnieniem i regułę ESLint blokującą nowe sagi. Ryzyka to dwa źródła prawdy w okresie przejściowym i niespójna invalidacja, więc mutacje od razu dostają invalidateQueries po kluczach.
Typowe wpadki
- „Przepiszmy wszystko na Zustanda w sprincie”
- Przeniesienie danych z API do Zustanda, czyli zmiana biblioteki bez zmiany modelu
- Brak planu na okres, w którym działają oba światy
- Mówienie tylko o technologii, bez metryk i ludzi
Dopytają o
- Jak zaprojektujesz klucze zapytań, żeby invalidacja była przewidywalna?
- Co zrobisz z logiką, która w sagach orkiestruje kilka żądań po kolei?
- Jak przekonasz zespół, który dobrze zna Reduxa?