React 19.3 a apărut pe 9 septembrie 2026. Majoritatea articolelor despre lansare par o listă de funcții; eu le citesc ca pe o listă de cod pe care îl pot elimina. Comparativ cu React 18 — încă folosit în multe aplicații de producție — seria 19 înseamnă mai puțin sintaxă nouă și mai mult renunțarea la soluțiile improvizate de fiecare echipă: mașini de stare pentru formulare, wrapper-e pentru forwardRef, memo peste tot și verificări typeof window.
React 19.0 a pus bazele. Actions și useActionState au înlocuit trio-ul construit manual isPending / error / data pentru fiecare formular. useOptimistic a transformat interfața optimistă într-un hook în loc de reducer. use() citește o promisiune sau un context în timpul randării, chiar și condiționat. ref a devenit un prop obișnuit, așa că forwardRef ține de trecut; <Context> poate fi propriul provider; <title> și <meta> ajung în head din orice componentă. Schimbarea a avut și un cost: string refs, legacy context, ReactDOM.render și propTypes pentru componentele funcționale au dispărut. O aplicație React 18 cu dependențe vechi are nevoie de o migrare reală, nu doar de un număr de versiune mai mare.
React 19.2 și React Compiler 1.0 au schimbat senzația de lucru. <Activity mode="hidden"> păstrează montată o filă sau pagina următoare, împreună cu starea, dar îi suspendă efectele — ceea ce înainte încercam să simulăm cu display: none și speranță. useEffectEvent pune capăt disputei cu regula exhaustive-deps: efectul reacționează la roomId, callback-ul doar citește tema cea mai recentă. Pre-randarea parțială (prerender, apoi resume) permite servirea unui cadru static de pe CDN în timp ce partea dinamică vine în flux. Compiler a făcut inutile și majoritatea apelurilor manuale la useMemo, useCallback și React.memo. Le păstrez când o bibliotecă are nevoie de identitate referențială, dar nu le mai adaug automat.
React 19.3 se ocupă de tranziții și limitele DOM-ului. <ViewTransition> este acum stabil: încapsulezi un element, marchezi actualizarea cu startTransition, iar browserul animează apariția, dispariția și elementele comune. addTransitionType permite tranzițiilor „next” și „previous” să alunece în direcții diferite pornind de la aceeași actualizare de stare. Fragment refs oferă focus(), observeUsing() pentru IntersectionObserver și măsurarea unui grup de elemente-surori fără un div suplimentar. use(browser()) din react-dom înlocuiește testul typeof window !== "undefined": componenta se suspendă pe server, afișează fallback-ul Suspense și se randează pe client după hydration. Server Components pot randa direct <Context value>, fără un fișier provider „use client”; react-dom transmite și obiectele Trusted Types fără să le convertească în șiruri, astfel încât React funcționează cu o CSP strictă și require-trusted-types-for.
Diferența se vede în importuri. În React 18, un formular cu stare de așteptare, actualizare optimistă și listă animată însemna trei biblioteci și un hook personalizat; în 19.3 sunt suficiente useActionState, useOptimistic și <ViewTransition>, toate din React. În 18, „randează doar pe client” însemna un indicator mounted și o deplasare a layout-ului; acum înseamnă o linie și o limită Suspense. Performanța în 18 depindea de disciplina folosirii memo; acum Compiler și React Performance Tracks din Chrome DevTools arată ce a blocat efectiv un cadru.
Nu aș sări de la 18 la 19.3 într-un singur pull request pentru un produs care gestionează bani. Urmez intenționat un traseu plictisitor: mai întâi 18.3, pentru a vedea avertismentele de depreciere; apoi 19 cu codemod-urile oficiale; după aceea testez Compiler pe o singură rută, în spatele unui flag; API-urile noi vin doar acolo unde elimină cod. 19.3 este aditiv și anunțul nu menționează schimbări incompatibile, dar alertele de securitate pentru Server Components din decembrie 2025 amintesc că versiunile patch contează la fel de mult ca cele majore. Dacă aplicația ta este încă pe 18, trimite-mi package.json și cele trei ecrane importante. Îți voi răspunde cu ordinea upgrade-ului și codul pe care îl poți șterge.
Oferă-i următorului produs cuiva care rămâne.
Ești gata să începem? Trimite-mi un mesaj - pot începe acum și pot rămâne alături de produs. Colaborări pe termen lung, nu o predare în două săptămâni. Să discutăm proiectul, cerințele și cea mai bună cale de urmat.