Migracja dużej aplikacji z React 17 na 18/19
Aplikacja ma 400 komponentów, część klasowych, kilka bibliotek nieutrzymywanych od lat i własny system modali. Po próbnym podbiciu do React 18 z createRoot pojawiają się podwójne żądania w dev, migające formularze i błędy w jednej bibliotece drag and drop. Masz zaplanować migrację.
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 rozumiesz, co realnie zmienia React 18 (automatic batching, concurrent, StrictMode)
- Czy planujesz przyrostowo i z pomiarem
- Czy umiesz ocenić zależności zewnętrzne
Odpowiedź seniora
Najpierw audyt zależności: które biblioteki mają wersje zgodne z 18, które trzeba podbić albo zastąpić. Potem podbicie react i react-dom z zachowaniem starego ReactDOM.render (tryb legacy działa w 18), co pozwala wdrożyć wersję bez zmiany zachowania.
Drugi krok to createRoot, czyli automatic batching i concurrent features. Podwójne żądania w dev to StrictMode, który celowo montuje efekty dwa razy i pokazuje efekty bez cleanupu. Naprawiam je (AbortController, flaga ignore, przeniesienie pobierania do TanStack Query), zamiast wyłączać StrictMode. Biblioteki, które czytają DOM w render, zastępuję lub izoluję.
Wdrażam za feature flagą na procent ruchu, mierzę błędy w Sentry i Web Vitals. Komponentów klasowych nie przepisuję hurtem: działają, przepisuję je przy okazji zmian. React 19 (ref jako prop, Actions, use) to osobny etap, gdy zależności go wspierają.
Typowe wpadki
- Wyłączenie StrictMode, „bo psuje”
- Przepisanie wszystkich klas na hooki w ramach migracji
- Big bang bez flagi i bez planu powrotu
Dopytają o
- Jak znajdziesz komponenty z efektami bez cleanupu?
- Czy useTransition coś wam da? Gdzie konkretnie?
- Jak sprawdzisz, że automatic batching nie zmienił logiki?