صدر React 19.3 في 9 سبتمبر 2026. تبدو معظم مقالات الإطلاق كقائمة ميزات؛ أما أنا فأقرأها كقائمة بالشيفرة التي يمكنني حذفها. وبالمقارنة مع React 18 — الذي ما زال أساسًا لكثير من تطبيقات الإنتاج — لا يدور خط الإصدار 19 حول صياغة جديدة بقدر ما يدور حول التخلص من الحلول الالتفافية التي كتبتها الفرق بنفسها: آلات الحالة للنماذج، وأغلفة forwardRef، واستخدام memo في كل مكان، وفحوص typeof window.
وضع React 19.0 الأساس. حلّت Actions وuseActionState محل المجموعة اليدوية isPending / error / data في كل نموذج. وحوّل useOptimistic الواجهة المتفائلة إلى hook بدل reducer. تقرأ use() وعدًا أو سياقًا أثناء العرض، حتى بصورة شرطية. أصبح ref خاصية عادية، لذا بات forwardRef أسلوبًا قديمًا؛ ويمكن لـ<Context> أن يعمل كمزوّد بنفسه؛ وتُنقل <title> و<meta> إلى head من أي مكوّن. لكن للتغيير كلفة: أزيلت مراجع السلاسل والسياق القديم وReactDOM.render وpropTypes من المكوّنات الوظيفية. لذلك يحتاج تطبيق React 18 ذو الاعتماديات القديمة إلى ترقية فعلية، لا مجرد رفع رقم الإصدار.
غيّر React 19.2 وReact Compiler 1.0 طريقة العمل. يُبقي <Activity mode="hidden"> تبويبًا أو الصفحة التالية مركّبة مع حالتها، مع إيقاف تأثيراتها مؤقتًا — وهو ما كنا نقلده سابقًا باستخدام display: none والأمل. ينهي useEffectEvent الخلاف مع قاعدة exhaustive-deps: يتفاعل التأثير مع roomId، بينما يقرأ callback أحدث سمة فحسب. يتيح العرض المسبق الجزئي (prerender ثم resume) إرسال هيكل ثابت من CDN بينما يصل الجزء الديناميكي بالبث. كما جعل Compiler معظم الاستدعاءات اليدوية لـuseMemo وuseCallback وReact.memo غير ضرورية. ما زلت أستخدمها عندما تحتاج مكتبة إلى هوية مرجعية، لكنها لم تعد عادة تلقائية.
يركز React 19.3 على الحركة وحدود DOM. أصبح <ViewTransition> مستقرًا: لفّ عنصرًا، وحدد التحديث بـstartTransition، فيحرك المتصفح الظهور والاختفاء والعناصر المشتركة. ويتيح addTransitionType انزلاق «next» و«previous» في اتجاهين مختلفين من تحديث الحالة نفسه. توفّر Fragment refs الدالة focus() وobserveUsing() لـIntersectionObserver وقياسات مجموعة من العناصر الشقيقة دون div إضافي. يستبدل use(browser()) من react-dom فحص typeof window !== "undefined": يعلّق المكوّن عرضه على الخادم، ويعرض البديل Suspense، ثم يعرض على العميل بعد hydration. وتستطيع Server Components عرض <Context value> مباشرةً دون ملف مزوّد «use client»؛ كما يمرّر react-dom كائنات Trusted Types دون تحويلها إلى سلاسل، فيعمل React مع سياسة CSP صارمة تتضمن require-trusted-types-for.
يظهر الفرق عند مقارنة الاستيرادات. في React 18، كان النموذج ذو حالة الانتظار والتحديث المتفائل والقائمة المتحركة يعني ثلاث مكتبات وhook مخصصًا؛ أما في 19.3 فتكفي useActionState وuseOptimistic و<ViewTransition>، وكلها من React نفسه. وكان «العرض على العميل فقط» في 18 يعني علم mounted وقفزة في التخطيط؛ أما الآن فيكفي سطر واحد وحد Suspense. وكانت الكفاءة في 18 تتطلب الانضباط في استخدام memo؛ أما Compiler وReact Performance Tracks في Chrome DevTools فيكشفان ما عطّل الإطار فعلًا.
لن أقفز من 18 إلى 19.3 في طلب سحب واحد لمنتج يتعامل مع الأموال. أتبع مسارًا رتيبًا عمدًا: الانتقال أولًا إلى 18.3 لإظهار تحذيرات الإهمال، ثم إلى 19 باستخدام codemods الرسمية، ثم اختبار Compiler على مسار واحد خلف ميزة تجريبية، وبعدها استخدام الواجهات الجديدة حيث تحذف الشيفرة فقط. إصدار 19.3 إضافي ولا يذكر إعلان الإصدار تغييرات كاسرة، لكن التنبيهات الأمنية الخاصة بـServer Components في ديسمبر 2025 تذكّر بأن إصدارات التصحيح لا تقل أهمية عن الإصدارات الرئيسية. إذا ظل تطبيقك على 18، فأرسل package.json وأهم ثلاث شاشات لديك. سأقترح ترتيب الترقية والشيفرة التي يمكنك حذفها بعدها.
امنح المنتج القادم شخصاً يبقى معه.
هل أنت مستعد للبدء؟ أرسل لي رسالة؛ أنا متاح للبدء الآن والبقاء. عقود طويلة الأمد، لا تسليم خلال أسبوعين. لنتحدث عن مشروعك ومتطلباته وأفضل طريقة للمضي قدماً.