Mojtaba Pourkhanlar
About meProjectsBlog

  • 👤About me
  • 🧰Projects
  • ✍️Blog

React 18 vs React 19

خب React 19 یکی از مهم‌ترین آپدیت‌های React در سال‌های اخیر است.
در حالی که React 18 تمرکز اصلی خود را روی Concurrent Rendering و Suspense گذاشته بود، React 19 تمرکز را روی Server Actions، مدیریت فرم‌ها و ساده‌تر کردن معماری full‑stack قرار داده است.


Server Actions

React 18

در React 18 برای ارتباط با سرور معمولاً باید از روش‌های زیر استفاده می‌کردیم:

  • API Routes
  • fetch / axios
  • state management

React 19

اما React 19 قابلیت Server Actions را معرفی کرد که اجازه می‌دهد منطق سمت سرور مستقیماً در کامپوننت‌ها نوشته شود.

"use server";

export async function createPost(formData: FormData) {
  const title = formData.get("title");

  await db.post.create({
    data: { title },
  });
}
<form action={createPost}>
  <input name="title" />
  <button type="submit">Create</button>
</form>
  • این قابلیت باعث کاهش نیاز به APIهای جداگانه می‌شود.

مدیریت فرم‌ها

React 18

در React 18 معمولاً فرم‌ها با این روش مدیریت می‌شدند:

  • useState
  • onSubmit
  • event.preventDefault()
function Form() {
  const [email, setEmail]
 = useState("");

  const handleSubmit = e => {
    e.preventDefault();
    console.log(email);
  };

  return (
    <form onSubmit={handleSubmit}>
      <input onChange={e => setEmail(e.target.value)} />
      <button>Submit</button>
    </form>
  );
}

React 19

اما React 19 فرم‌ها را ساده‌تر کرده است.

async function submitForm(formData: FormData) {
  "use server";

  const email = formData.get("email");
  console.log(email);
}
<form action={submitForm}>
  <input name="email" />
  <button>Submit</button>
</form>

Optimistic UI

React 18

برای پیاده‌سازی optimistic update باید state را دستی مدیریت می‌کردیم.

React 19

خب React 19 هوک جدیدی معرفی کرده است:

  • useOptimistic
const [optimisticComments, addComment]
 = useOptimistic(
  comments,
  (state, newComment) => [...state, newComment]
,
);
  • این hook اجازه می‌دهد UI قبل از پاسخ سرور آپدیت شود.

مدیریت وضعیت فرم

React 18

برای مدیریت loading و error در فرم‌ها معمولاً باید state جداگانه تعریف می‌کردیم.

React 19

دو hook جدید معرفی شده است:

  • useFormStatus
  • useActionState
import { useFormStatus } from "react-dom";

function SubmitButton() {
  const { pending } = useFormStatus();

  return (
    <button disabled={pending}>{pending ? "Submitting..." : "Submit"}</button>
  );
}

Metadata Management

React 18

مدیریت معمولاً با کتابخانه‌هایی مثل:

  • react-helmet
  • framework utilities

انجام می‌شد.

React 19

اما در react 19 می‌تواند مستقیماً metadata را مدیریت کند.

function Page() {
  return (
    <>
      <title>My Page</title>
      <meta name="description" content="React 19 example" />
    </>
  );
}

Asset Loading Improvements

خب React 19 مدیریت preload و preconnect را بهتر کرده است.

import { preload } from "react-dom";

preload("/fonts/inter.woff2", {
  as: "font",
});

این قابلیت باعث می‌شود:

  • لود منابع سریع‌تر شود
  • و performance بهتر شود

Suspense Improvements

React 18

خب Suspense معرفی شد و برای async rendering استفاده می‌شد.

React 19

اما در react 19 Suspense بهینه‌تر شده و بهتر با streaming و server rendering کار می‌کند.

<Suspense fallback={<p>Loading...</p>}>
  <UserProfile />
</Suspense>

Hydration Improvements

در React 19 مشکل‌های hydration mismatch را کاهش داده است.

در نتیجه:

  • خطاهای کمتر در SSR
  • رفتار قابل پیش‌بینی‌تر در hydration
  • performance بهتر

جمع‌بندی

اگر React 18 شروع معماری concurrent بود،

در React 19 شروع معماری full‑stack React است.

مهم‌ترین تغییرات React 19:

  • Server Actions
  • مدیریت ساده‌تر فرم‌ها
  • Optimistic UI
  • hookهای جدید برای async state
  • performance بهتر در SSR و streaming

به همین دلیل فریمورک‌هایی مثل Next.js 15 و Next.js 16 بیشترین بهره را از React 19 می‌برند.