Menu

React 19: Yeni Özellikler, Kaldırılan API'ler ve Yükseltme

React 19; Actions, useActionState, useOptimistic, use, prop olarak ref ve belge meta verisini ekledi, 19.2 ise Activity ve useEffectEvent'i ekledi. Her özelliği çalışırken, nelerin kaldırıldığını ve nasıl yükseltileceğini gör.

Bu sayfada çalıştırılabilir editörler var - düzenle, çalıştır ve sonucu anında gör.

React 19, Aralık 2024'te yayınlanan React ana sürümüdür. Actions (bekleme durumunu, hataları ve formları yöneten async fonksiyonlar), useActionState, useOptimistic ve use hook'larını, normal bir prop olarak ref'i ve React'in belgenin head bölümüne taşıdığı <title> ile <meta> etiketlerini ekler. React 19.2 (Ekim 2025) <Activity> ve useEffectEvent'i ekledi.

Aşağıdaki her örnek React 19.2 üzerinde çalışır. İşte bir Action: bir forma aktarılan, bekleme durumu ve döndürülen hatası useActionState tarafından yönetilen async bir fonksiyon.

Hatayı görmek için alan boşken Save'e bas, sonra bir ad yaz ve kaydet: düğme 800 ms boyunca "Saving..." der. Hata için useState, isLoading bayrağı ve e.preventDefault() yoktur.

Actions ve form action'ları

React 18'de her form için aynı adımları yazıyordun: varsayılan gönderimi engelle, bir yükleme bayrağı ayarla, isteği bekle, bir hatayı sakla, bayrağı temizle. React 19, bir transition içinde async iş yapan bir fonksiyona Action der ve bu hesap işini senin için yapar.

  • startTransition (ve useTransition) artık async bir fonksiyon kabul eder. isPending, tüm fonksiyon bitene kadar true kalır.
  • <form action={fn}>, form gönderildiğinde fn'i formun FormData'sı ile çağırır. Bir Action olarak çalışır ve bittikten sonra React formun kontrolsüz alanlarını sıfırlar.
  • <button formAction={fn}> tek bir gönder düğmesine kendi action'ını verir.
  • useActionState, action'ın en son döndürdüğü değeri tutar; böylece bir action bir hata mesajı ya da kaydedilmiş kaydı döndürebilir.
  • react-dom'dan useFormStatus, bir formun içindeki bir bileşenin props aşağı aktarmadan o formun gönderilip gönderilmediğini okumasını sağlar. Bir ebeveyn <form>'a ihtiyaç duyar, bu yüzden burada statik bir blokta görünüyor:
import { useFormStatus } from 'react-dom';

function SubmitButton() {
    const { pending } = useFormStatus();
    return <button disabled={pending}>{pending ? 'Sending...' : 'Send'}</button>;
}

useOptimistic

useOptimistic, bir Action hâlâ çalışırken beklediğin sonucu gösterir ve Action bittiğinde gerçek state'e geri döner. Bir beğeni sayacı tıkladığın anda artabilir ve istek başarısız olursa geri düşebilir.

const [optimisticLikes, addOptimisticLike] = useOptimistic(likes, (current, delta) => current + delta);

useOptimistic sayfasında bilerek başarısız olan sahte bir API ile çalıştırılabilir bir örnek var, böylece geri almayı izleyebilirsin.

use API'si

use, bir promise'ten ya da bir context'ten bir değer okur. Bir promise ile bileşeni promise resolve olana kadar askıya alır ve en yakın <Suspense> bu arada yedek içeriğini gösterir. Diğer tüm hook'ların aksine use bir if'in ya da bir döngünün içinde ve erken bir return'den sonra çağrılabilir.

React 19 ayrıca <ThemeContext.Provider> yerine doğrudan <ThemeContext value="dark"> render etmene izin verir. İkisi de bu örnekte görünüyor:

Prop olarak ref ve ref temizlemesi

Bir fonksiyon bileşeni artık ref'i diğer her prop gibi alır. Bir ref'i bir DOM öğesine iletmek için onu artık forwardRef ile sarman gerekmez.

Bir ref callback'i ayrıca bir temizleme fonksiyonu döndürebilir. React onu öğe ekrandan ayrıldığında çağırır, tıpkı bir efektin temizlemesi gibi. Hiçbir şey döndürmeyen bir callback, React 18'deki gibi kaldırılırken yine null ile çağrılır.

Düğmeye birkaç kez tıkla ve konsolu oku: her kaldırma temizleme satırını, her geri dönüş attached to DIV'i kaydeder.

Belge meta verisi

<title>, <meta> ve <link>'i bir bileşenin herhangi bir yerinde render edebilirsin, React de onları <head>'e taşır. Bir sayfa bileşeni react-helmet gibi bir kütüphane olmadan kendi başlığını ayarlayabilir.

Önizlemenin gösterecek bir tarayıcı sekmesi yok, bu yüzden efekt bunun yerine document.title'ı kaydeder. Makaleler arasında geçiş yap; kaydedilen başlık takip eder.

Stil dosyaları da aynı muameleyi gördü: bir bileşenin içindeki <link rel="stylesheet" href="..." precedence="default" /> head'e bir kez, öncelik sırasına göre eklenir ve React ona ihtiyaç duyan içeriği göstermeden önce onu bekler. Birkaç bileşenin render ettiği bir <script async src="..."> yalnızca bir kez yüklenir. react-dom ayrıca kaynak ipuçları için preload, preinit, preconnect ve prefetchDNS export eder.

Activity ve useEffectEvent (React 19.2)

<Activity mode="hidden"> çocuklarını state'lerini atmadan gizler. React DOM'u gizler, efektlerin temizlemelerini çalıştırır ve mod yeniden "visible" olduğunda her şeyi geri getirir. Kullanıcının geri gelmesini beklediğin sekmelere ve panellere uyar.

Bir not yaz, About'a geç ve geri dön. Metin hâlâ oradadır ve konsol efektin gizliyken temizlendiğini gösterir. <Activity> sarmalayıcısını {tab === 'notes' && <Notes />} ile değiştir; not her geçişte kaybolur.

useEffectEvent bir fonksiyonu bir efektin bağımlılıklarının dışına çıkarır. Fonksiyon her zaman en son props ve state'i görür, ama onları değiştirmek efekti yeniden başlatmaz:

function ChatRoom({ roomId, theme }) {
    const onConnected = useEffectEvent(() => {
        showNotification('Connected!', theme);
    });

    useEffect(() => {
        const connection = createConnection(roomId);
        connection.on('connected', () => onConnected());
        connection.connect();
        return () => connection.disconnect();
    }, [roomId]); // theme is not a dependency
}

19.2 ayrıca Server Components için cacheSignal'ı (bir cache() sonucuna artık ihtiyaç olmadığında sana söyler) ve Chrome DevTools performans panelinde Performance Tracks'i ekledi. React 19.1, mevcut bileşeni hangi bileşenlerin render ettiğini döndüren, yalnızca geliştirme için bir fonksiyon olan captureOwnerStack'i ekledi.

Server Components ve Server Functions

Server Components, sunucuda (ya da derleme zamanında) önceden çalışan ve çıktılarını tarayıcıya gönderen bileşenlerdir. async olabilir ve bir veritabanını doğrudan okuyabilirler; kodları asla istemciye gönderilmez. Server Functions (ilk adıyla Server Actions), bir istemci bileşeninin normal bir fonksiyon gibi çağırabileceği, 'use server' ile işaretlenmiş async fonksiyonlardır. İkisi de Next.js App Router gibi onları destekleyen bir paketleyicisi olan bir framework gerektirir, bu yüzden bu editörde çalışamazlar.

// A Server Component: async, runs on the server only
export default async function Notes() {
    const notes = await db.notes.findMany();
    return notes.map((note) => <Note key={note.id} note={note} />);
}

// A Server Function, usable as a form action
async function createNote(formData) {
    'use server';
    await db.notes.create({ text: formData.get('text') });
}

Kaldırılan ve değişen API'ler

React 19 yıllardır kullanımdan kaldırılmış olan API'leri kaldırdı:

KaldırılanBunun yerine kullan
ReactDOM.render, ReactDOM.hydratereact-dom/client'tan createRoot, hydrateRoot
unmountComponentAtNoderoot.unmount()
findDOMNodeDOM öğesinde bir ref
String ref'ler (ref="input")useRef ya da bir ref callback'i
Eski context (contextTypes, getChildContext)static contextType ile createContext ya da use
propTypes kontrolleri (artık sessizce yok sayılıyor)TypeScript ya da kendi kontrollerin
Fonksiyon bileşenlerinde defaultPropsvarsayılan parametre değerleri
react-dom/test-utilsreact'ten act; geri kalanı için React Testing Library
react-test-renderer/shallowreact-shallow-renderer paketi
React.createFactoryJSX

Class bileşenleri defaultProps'u korur. Hatalar da farklı bildirilir: bir error boundary tarafından yakalanan hatalar bir kez console.error ile kaydedilir, yakalanmamış hatalar window.reportError'a gider ve createRoot onları kendin bildirmen için onCaughtError ve onUncaughtError seçeneklerini kabul eder.

React 19'a yükseltme

Önce React 18.3'e yükselt. 18.2 ile aynıdır ama kullanımdan kaldırılan API'ler ve React 19'un ihtiyaç duyduğu diğer değişiklikler hakkında uyarır, böylece uygulama hâlâ çalışırken onları düzeltebilirsin. React 19 ayrıca Vite ve tüm güncel framework'lerin zaten kullandığı modern JSX dönüşümünü gerektirir. Sonra React 19'u kur:

npm install react@^19 react-dom@^19
npm install --save-dev @types/react@^19 @types/react-dom@^19

Resmi yükseltme rehberi mekanik değişiklikler için codemod'lara yönlendirir. İlki string ref'leri, act import'larını ve ReactDOM.render'ı kapsar; ikincisi TypeScript kodunu yeni tipler için günceller:

npx codemod@latest react/19/migration-recipe
npx types-react-codemod@latest preset-19 ./src

Yükselttikten sonra hiçbir şey seni Actions'ı ya da yeni hook'ları benimsemeye zorlamaz. Mevcut bileşenler, hook'lar ve class bileşenleri çalışmaya devam eder; formları teker teker <form action>'a taşıyabilirsin.

Sıkça Sorulan Sorular

React 19 ne zaman yayınlandı?

React 19 Aralık 2024'te kararlı hâle geldi. Ardından Mart 2025'te React 19.1, Ekim 2025'te de React 19.2 geldi.

React 19'daki en büyük değişiklikler neler?

Actions (bekleme durumunu, hataları ve formları senin için yöneten async fonksiyonlar), useActionState, useOptimistic ve use hook'ları, normal bir prop olarak ref, provider olarak <Context> ve belgenin head bölümüne taşınan <title> ile <meta> etiketleri. Server Components framework'ler için kararlı hâle geldi.

forwardRef React 19'da kullanımdan kalktı mı?

Fonksiyon bileşenleri artık ref'i normal bir prop olarak alabilir, bu yüzden yeni kodun forwardRef'e ihtiyacı yoktur. Hâlâ çalışır ve React ekibi onun gelecekteki bir sürümde kullanımdan kaldırılacağını söyledi.

React 19 React 18 uygulamamı bozar mı?

Çoğunlukla kaldırılan API'ler aracılığıyla: ReactDOM.render, findDOMNode, string ref'ler, eski context, propTypes ve fonksiyon bileşenlerinde defaultProps. React 19 ayrıca modern JSX dönüşümünü gerektirir. Önce React 18.3'e yükselt, kullanımdan kaldırma uyarılarını düzelt, sonra React 19 codemod'larını çalıştır.

React 19'u kullanmak için Next.js'e ihtiyacım var mı?

Hayır. Actions, yeni hook'lar, prop olarak ref ve meta veri, Vite ile kurulmuş düz bir istemci uygulamasında çalışır. Server Components ve Server Functions, Next.js gibi onları destekleyen bir framework gerektirir.

Coddy programlama dilleri çizimi

Coddy ile kodlamayı öğren

BAŞLA