Ugrás a tartalomra
Vissza a bloghoz
Frontend

A React 19 megérkezett – Minden, amit tudnod kell róla

2025. január 15.22 perc olvasás
#React#JavaScript#Frontend
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.

Újságírói illusztráció

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 (/* ... */);
}
Újságírói illusztráció

✨ 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>
Újságírói illusztráció

⚡ 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:

  1. Frissítsd a függőségeket – npm install react@19 react-dom@19
  2. 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.
  3. 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.
  4. 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.

Újságírói illusztráció

Mi a véleményed a React 19-ről? Kipróbáltad már? Írd meg kommentben! 👇

Szabolcs Alex

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!