Menu

React 19 ile Gelen Yenilikler

Türkçe
React 19 ile gelen yenilikler ve performans iyileştirmeleri hakkında detaylı bir inceleme. Yeni bileşenler, güncellemeler ve geliştirme süreçleri hakkında bilgi edinin.

React 19: Modern Web Geliştirmenin Yeni Çağı

React ekosistemi, 19. sürümüyle birlikte web geliştirme dünyasında çığır açacak yeniliklerle karşımıza çıkıyor. Bu güncellemeler, performanstan geliştirici deneyimine, render optimizasyonlarından veri yönetimine kadar birçok alanda önemli iyileştirmeler sunuyor. Bu yazımızda, React 19 ile hayatımıza giren yenilikleri detaylı bir şekilde inceleyeceğiz.

Yeni Hooks API'ları

React 19, geliştirici deneyimini zenginleştiren birçok yeni hook ile geliyor. Bu hook'lar, yaygın kullanım senaryolarını daha basit ve daha verimli hale getiriyor.

useFormStatus ve useFormState

Form yönetimini kolaylaştırmak için tasarlanan bu hook'lar, form durumunu takip etmeyi ve form işlemlerini kontrol etmeyi daha kolay hale getiriyor:

import { useFormStatus, useFormState } from "react";

function SubmitButton() {
  const { pending, data, method, action } = useFormStatus();

  return (
    <button type="submit" disabled={pending}>
      {pending ? "Gönderiliyor..." : "Gönder"}
    </button>
  );
}

function LoginForm() {
  const [state, formAction] = useFormState(submitLogin, initialState);

  return (
    <form action={formAction}>
      {state.error && <p className="error">{state.error}</p>}
      <input type="email" name="email" required />
      <input type="password" name="password" required />
      <SubmitButton />
    </form>
  );
}

useOptimistic

Kullanıcı deneyimini iyileştirmek için tasarlanan useOptimistic, kullanıcı eylemlerinin sonucunu beklemeden UI güncellemelerini gerçekleştirmenizi sağlar:

import { useOptimistic, useState } from "react";

function MessageThread() {
  const [messages, setMessages] = useState([]);
  const [optimisticMessages, addOptimisticMessage] = useOptimistic(
    messages,
    (state, newMessage) => [...state, { ...newMessage, sending: true }]
  );

  async function sendMessage(text) {
    const newMessage = { text, timestamp: Date.now() };
    addOptimisticMessage(newMessage);

    // API isteği gönderiliyor
    await sendMessageToServer(newMessage);

    // Başarılı yanıt geldiğinde, gerçek mesajları güncelle
    setMessages((prevMessages) => [...prevMessages, newMessage]);
  }

  return (
    <div className="message-thread">
      {optimisticMessages.map((msg) => (
        <div
          className={`message ${msg.sending ? "sending" : "sent"}`}
          key={msg.timestamp}
        >
          {msg.text}
        </div>
      ))}
    </div>
  );
}

Yeni Bellek Yönetimi: Otomatik Memoizasyon

React 19, performansı artırmak için otomatik memoizasyon özelliği sunuyor. Bu, geliştiricilerin manuel olarak React.memo, useMemo veya useCallback kullanma ihtiyacını azaltıyor:

// React 18 ve öncesi
function ExpensiveComponent({ data }) {
  const processedData = useMemo(() => {
    return expensiveComputation(data);
  }, [data]);

  return <div>{processedData}</div>;
}

// React 19 ile
function ExpensiveComponent({ data }) {
  // React otomatik olarak memoize ediyor
  const processedData = expensiveComputation(data);

  return <div>{processedData}</div>;
}

Document Metadata API

React 19, sunucu bileşenleri ile meta verileri yönetmek için yeni bir API sunuyor:

import { Meta, Title, Link } from "react";

function ProductPage({ product }) {
  return (
    <>
      <Title>{product.name} - Mağazamız</Title>
      <Meta name="description" content={product.description} />
      <Link
        rel="canonical"
        href={`https://example.com/products/${product.id}`}
      />

      <h2>{product.name}</h2>
      <p>{product.description}</p>
      <p>{product.price} TL</p>
    </>
  );
}

Gelişmiş Sunucu Bileşenleri

React 19, sunucu bileşenlerinde büyük iyileştirmeler getiriyor. Artık sunucu tarafında veri çekme ve işleme daha verimli:

// ServerComponent.js
export default async function ProductList() {
  // Sunucu tarafında veri çekme
  const products = await fetchProducts();

  return (
    <div className="product-grid">
      {products.map((product) => (
        <ProductCard key={product.id} product={product} />
      ))}
    </div>
  );
}

// ClientComponent.js
("use client");

import { useState } from "react";

export function ProductCard({ product }) {
  const [isInCart, setIsInCart] = useState(false);

  return (
    <div className="product-card">
      <h3>{product.name}</h3>
      <p>{product.price} TL</p>
      <button onClick={() => setIsInCart(!isInCart)}>
        {isInCart ? "Sepetten Çıkar" : "Sepete Ekle"}
      </button>
    </div>
  );
}

React Compiler: Zero-Bundle Size Abstractions

React 19, yeni derleyici sayesinde sıfır boyutlu soyutlamalar sunuyor. Bu, performansı artırırken bundle boyutunu küçültüyor:

// React 18 ve öncesi - her bir hook için kod eklenir
import { useState, useEffect, useMemo } from "react";

// React 19 - derleyici optimize eder
function Counter() {
  const [count, setCount] = useState(0);
  const doubledCount = count * 2; // Derleyici otomatik optimize eder

  return (
    <div>
      <p>Sayaç: {count}</p>
      <p>İki katı: {doubledCount}</p>
      <button onClick={() => setCount(count + 1)}>Artır</button>
    </div>
  );
}

Actions API: Sunucu Etkileşimleri İçin

React 19'un getirdiği Actions API, sunucu ile etkileşimleri büyük ölçüde kolaylaştırıyor:

// server-action.js
"use server";

export async function updateUserProfile(formData) {
  const name = formData.get("name");
  const email = formData.get("email");

  // Veritabanı güncellemesi
  await db.users.update({
    where: { id: session.userId },
    data: { name, email },
  });

  return { success: true };
}

// ProfileForm.jsx
import { updateUserProfile } from "./server-action";

export function ProfileForm({ user }) {
  return (
    <form action={updateUserProfile}>
      <input name="name" defaultValue={user.name} />
      <input name="email" defaultValue={user.email} />
      <button type="submit">Profili Güncelle</button>
    </form>
  );
}

Asset Loading API

React 19, varlık yüklemeyi optimize etmek için yeni bir API sunuyor:

import { preload, prefetch, preinit } from "react";

function Navigation() {
  // Kullanıcı fareyi üzerine getirdiğinde önceden yükle
  const handleMouseEnter = () => {
    prefetch("/dashboard");
    preload("/images/dashboard-hero.jpg");
    preinit("/api/dashboard-data", { as: "fetch" });
  };

  return (
    <nav>
      <a href="/dashboard" onMouseEnter={handleMouseEnter}>
        Panele Git
      </a>
    </nav>
  );
}

Performans İyileştirmeleri

React 19, render performansında önemli iyileştirmeler sunuyor:

Gelişmiş Concurrent Rendering

function App() {
  return (
    <>
      <Suspense fallback={<Loading />}>
        <Feed />
      </Suspense>

      {/* Bu bileşen, Feed yüklenirken bile etkileşimli olacak */}
      <Sidebar />
    </>
  );
}

Transition API İyileştirmeleri

import { useTransition } from "react";

function SearchComponent() {
  const [query, setQuery] = useState("");
  const [isPending, startTransition] = useTransition();

  function handleChange(e) {
    // Acil UI güncellemesi
    const value = e.target.value;
    setQuery(value);

    // Daha düşük öncelikli işlemler
    startTransition(() => {
      // Ağır arama işlemleri
      setSearchResults(search(value));
    });
  }

  return (
    <>
      <input value={query} onChange={handleChange} />
      {isPending ? <LoadingIndicator /> : <SearchResults />}
    </>
  );
}

Yenilenmiş Hata Yakalama

React 19, hata yakalamayı geliştirmek için yeni mekanizmalar sunar:

function ErrorBoundary({ children, fallback }) {
  try {
    return children;
  } catch (error) {
    return fallback;
  }
}

function App() {
  return (
    <ErrorBoundary fallback={<p>Bir hata oluştu</p>}>
      <UserProfile />
    </ErrorBoundary>
  );
}

Gelişmiş React DevTools

React 19, geliştirici araçlarında da önemli iyileştirmeler sunuyor:

  • Performans ölçümü için gelişmiş zaman çizelgeleri
  • Sunucu ve istemci bileşenlerini görselleştirme
  • Hook kullanımını izleme ve optimize etme araçları

TypeScript Entegrasyonu

React 19, TypeScript ile daha iyi entegrasyon sağlıyor:

// Gelişmiş tip çıkarımı
function Counter<T extends number>({ initialValue }: { initialValue: T }) {
  const [count, setCount] = useState<T>(initialValue);

  return (
    <div>
      <p>Count: {count}</p>
      <button onClick={() => setCount((count + 1) as T)}>Artır</button>
    </div>
  );
}

Değerlendirme

React 19, modern web geliştirme dünyasında devrim niteliğinde yenilikler sunuyor. Otomatik memoizasyon, gelişmiş sunucu bileşenleri, yeni hook'lar ve Actions API gibi özelliklerle geliştirici deneyimini iyileştirirken, aynı zamanda uygulama performansını da artırıyor. Bu yenilikler, React'ın gelecek yıllarda da web geliştirmenin ön saflarında yer alacağının bir göstergesi.

React 19'un getirdiği bu yenilikler, uygulamalarımızı daha hızlı, daha güvenilir ve daha bakımı kolay hale getirmemize olanak tanıyor. Bu yeni özellikleri projelerinize entegre ederek, kullanıcı deneyimini ve geliştirme süreçlerinizi bir üst seviyeye taşıyabilirsiniz.

1

Hiçbir kampanyayı kaçırma!

Bültenimize abone olun ve heyecan verici tekliflerimizi kaçırmayın.