A React 19 megérkezett – Minden, amit tudnod kell róla
🎉 Végre itt van a React 19! Hónapok óta vártuk, és megérte. Ez nem egy apró verziószám ugrás – tele van olyan funkciókkal, amelyek alapjaiban változtatják meg a React-alkalmazások fejlesztését. Ebben a cikkben nem csak felsorolom az újdonságokat, hanem valódi, használható példákon keresztül mutatom be, hogyan gyorsíthatod fel a munkádat és írhatsz jobb kódot.
Miért olyan nagy durranás a React 19?
Az elmúlt években a React elsősorban a stabilitásról és a fokozatos fejlesztésekről szólt. A 18-as verzió bevezette a concurrent rendering-et, de a fejlesztői élmény sok tekintetben ugyanaz maradt. A 19-es verzió viszont forradalmi váltást hoz a komponensek írásának módjában.
A legnagyobb változások:
- ✅ React Compiler – automatikus memoizáció, nincs több useMemo/useCallback
- ✅ Server Actions – szerveroldali függvények közvetlenül a komponensekből
- ✅ use() hook – Promise-ok és kontextusok egyszerű kezelése
- ✅ Document Metadata – title, meta leírások komponens szinten
- ✅ Form Actions – űrlapkezelés soha nem volt ilyen egyszerű
Nézzük is meg őket egyesével, rengeteg kódpéldával!
1. React Compiler – A memoizáció vége
Eddig ha optimalizálni akartad a komponensedet, kézzel kellett pakolnod a useMemo, useCallback és React.memo függvényeket. Nem csak hogy plusz munka volt, de könnyű volt elrontani, és gyakran több kódot jelentett, mint maga a logika.
A React 19 új kompilátora automatikusan elemzi a komponenseidet, és csak akkor renderel újra, amikor szükséges. Nézd meg ezt a példát:
// React 18 – kézi optimalizálás
import React, { useMemo, useCallback } from 'react';
function ExpensiveComponent({ items, onItemClick }) {
const expensiveValue = useMemo(() => {
return items.filter(item => item.active).map(item => item.value);
}, [items]);
const handleClick = useCallback((id) => {
onItemClick(id);
}, [onItemClick]);
return (/* ... */);
}
// React 19 – a compiler mindent megcsinál
function ExpensiveComponent({ items, onItemClick }) {
// A compiler rájön, hogy ez függ items-től
const expensiveValue = items.filter(item => item.active).map(item => item.value);
// A compiler látja, hogy ez egy stabil függvény
const handleClick = (id) => onItemClick(id);
return (/* ... */);
}
✨ Tanács: A compiler a build folyamat része, nem kell semmit sem telepítened külön. Csak frissíts a React 19-re, és a Next.js vagy Vite automatikusan használja.
2. Server Actions – Backend a frontendben
Ez a funkció igazi game changer. Korábban ha szerveroldali műveletet akartál végezni (pl. adatbázisba írni, fájlt feltölteni), külön API endpoint-ot kellett írnod, majd fetch-el meghívnod. A React 19-ben egyszerűen definiálhatsz egy 'use server' függvényt, és meghívhatod közvetlenül a komponensedből.
// app/actions.ts
'use server';
import { db } from './db';
import { revalidatePath } from 'next/cache';
export async function createPost(formData: FormData) {
const title = formData.get('title');
const content = formData.get('content');
await db.post.create({
data: { title, content, publishedAt: new Date() }
});
// Frissíti a cache-t, hogy megjelenjen az új bejegyzés
revalidatePath('/posts');
}
// app/components/CreatePostForm.tsx
import { createPost } from '../actions';
export function CreatePostForm() {
return (
<form action={createPost}>
<input name="title" placeholder="Cím" />
<textarea name="content" placeholder="Tartalom" />
<button type="submit">Létrehozás</button>
</form>
);
}
💡 Pro tipp: Használhatod a useFormStatus hookot a gomb letiltására küldés közben, és a useOptimistic hookot az azonnali UI frissítéshez.
3. use() hook – Promise-ok és kontextusok egyszerűen
Az új use() hook forradalmasítja az aszinkron adatok kezelését. Eddig a useEffect + useState kombót kellett használnod, vagy egy külső könyvtárat (pl. React Query). Mostantól közvetlenül a komponensben "feloldhatsz" egy Promise-t, és a React majd kezeli a loading állapotot.
// Adatfetchetés use() segítségével
async function fetchUser(id) {
const res = await fetch(`/api/users/${id}`);
return res.json();
}
function UserProfile({ userId }) {
// A userPromise lehet egy prop vagy context
const user = use(fetchUser(userId));
return (
<div>
<h1>{user.name}</h1>
<p>Email: {user.email}</p>
</div>
);
}
// Használat egy Suspense határral
<Suspense fallback={<div>Betöltés...</div>}>
<UserProfile userId={123} />
</Suspense>
⚡ Fontos: A use() hook nem csak Promise-okra működik, hanem kontextusokra is! Így feltételesen olvashatsz ki kontextus értékeket, amit eddig nem lehetett.
4. Document Metadata – Végre tiszta head kezelés
Ha valaha is próbáltál már meta címkéket beállítani egy React komponensből, tudod, hogy mekkora szenvedés. A react-helmet, next/head és egyéb megoldások mind kompromisszumok voltak. A React 19 bevezeti a szabványos metadata API-t:
function BlogPost({ post }) {
return (
<>
<title>{post.title} | Saját Blog</title>
<meta name="description" content={post.excerpt} />
<meta property="og:image" content={post.coverImage} />
<link rel="canonical" href={`https://példa.hu/posts/${post.slug}`} />
<article>{post.content}</article>
</>
);
}
A React automatikusan összegyűjti ezeket a címkéket és a dokumentum <head> részébe helyezi őket. Tökéletesen működik SSR-rel és SPA módban is.
5. Form Actions továbbfejlesztve
A React 19 tovább egyszerűsíti az űrlapok kezelését. A action prop most már támogatja az aszinkron függvényeket, és elérhetővé teszi a pending state kezelését:
import { useFormStatus } from 'react-dom';
function SubmitButton() {
const { pending } = useFormStatus();
return (
<button type="submit" disabled={pending}>
{pending ? 'Küldés folyamatban...' : 'Mentés'}
</button>
);
}
function RegistrationForm() {
async function register(formData) {
'use server';
await new Promise(resolve => setTimeout(resolve, 1000));
console.log('Regisztráció:', formData.get('email'));
}
return (
<form action={register}>
<input name="email" type="email" required />
<SubmitButton />
</form>
);
}
Hogyan frissítsünk React 19-re?
A frissítés általában problémamentes, de van pár dolog, amire figyelned kell:
- Frissítsd a függőségeket –
npm install react@19 react-dom@19 - Ellenőrizd a harmadik féltől származó könyvtárakat – Néhány régi könyvtár (pl. régi formik, react-helmet) nem kompatibilis. Használd helyettük a beépített megoldásokat.
- Távolítsd el a felesleges memoizációt – A React Compiler miatt már nincs szükség useMemo-ra és useCallback-re a legtöbb esetben.
- Teszteld alaposan – Különösen a concurrent módra épülő funkciókat.
Összegzés: Érdemes váltani?
Igen, mindenképpen! A React 19 nem csak új feature-öket hoz, hanem egy teljesen új fejlesztési paradigmát. A kódod egyszerűbb, gyorsabb és kevésbé hibára hajlamos lesz. A Server Actions és a use() hook pedig olyan lehetőségeket adnak, amelyekkel eddig csak más keretrendszerek (pl. SvelteKit, Solid) büszkélkedhettek.
Ha most kezdenél egy új projektet, ne is gondolkodj – használd a React 19-et. Ha meglévő projekted van, kezdd el fokozatosan bevezetni a változásokat. A közösség már most rengeteg mintát és best practice-t publikált.
Mi a véleményed a React 19-ről? Kipróbáltad már? Írd meg kommentben! 👇
Szabolcs Alex
Full Stack Developer & Tech Enthusiast
Szenvedélyes webfejlesztő, aki szeret megosztani tudását és tapasztalatait a modern webtechnológiákról. Ha kérdésed van, írj bátran!
