Sześć kart na dashboardzie, sześć spinnerów, i nie pojawiają się razem – pojawiają się jeden po drugim, jak kostki domina, bo każdy zaczął pobierać dane dopiero wtedy, gdy skończył ten nad nim. To waterfall, a łączne czekanie to nie najwolniejsze zapytanie, tylko suma wszystkich. use() i Suspense rozrywają ten łańcuch, ale najciekawsza jest maszyneria pod spodem: co naprawdę rzuca zawieszony komponent i jak HTML docierający nie po kolei trafia mimo to we właściwe miejsce.
Przez dziesięć lat animowanie miniatury w duży obraz oznaczało jedną technikę: zmierz element przed, zmierz po, udawaj różnicę transformem i puść. FLIP. Robi to każda biblioteka animacji i każda płaci za to JavaScriptem na głównym wątku w najgorszym możliwym momencie. View Transitions API przenosi całą tę sztuczkę do przeglądarki – a od Reacta 19.2 i Next.js 16 całym kontraktem jest jeden prop o nazwie name.
„use server” wygląda jak składniowy cukier na fetch do API route – i właśnie dlatego większość wdrożeń traktuje go jak zwykłe wywołanie funkcji. To błąd o konkretnych konsekwencjach: każda funkcja oznaczona „use server” staje się publicznym punktem końcowym w sieci, a formularz zbudowany na tym mechanizmie działa nawet zanim JavaScript zdąży się załadować. Sprawdzam, co faktycznie dzieje się pod tą dyrektywą, i gdzie leżą pułapki, których nie widać w dokumentacji na pierwszy rzut oka.
Poprawny HTML to dopiero początek. Sprawdź, jak naprawdę działa accessibility tree, dlaczego ARIA częściej szkodzi niż pomaga, i zbuduj razem ze mną dostępny akordeon, live region oraz obsługę fokusu w Next.js.