14/08/2025
مبرمج زهق من الـ props وقال: “هحط الـ state كله في localStorage وخلاص!”
المتصفّح رد عليه: “جميل… لحد ما تعمّل Refresh وتكتشف إنك بتبني DB في المتصفح!” 😂
ليه React-Redux؟
لما الـ app يكبر، بيحصل props drilling: تبعت بيانات من أب → ابن → حفيد… حتى لو الحفيد هو الوحيد اللي محتاجها. ده بيخلّي الكود معقّد وصعب الصيانة.
ناس كتير جرّبت حل بدائي: “حط كل حاجة في localStorage” علشان تبقى “متاحة في أي مكان”. بس ده له مشاكل:
أداء: قراءة/كتابة متزامنةBlocking وبتكبر مع حجم الداتا.
تزامن: المكوّنات مش هتعرف إن الداتا اتغيّرت تلقائيًا.
حدود حجم وأمان: مساحة محدودة ونص عادي (غير مشفّر).
Redux بيقدّم Store واحد (Single Source of Truth) + تحديثات متوقّعة (predictable).
react-redux بيربط React بالـ Store بطريقة سهلة وأداء عالي (بـ Provider, useSelector, useDispatch).
الفكرة: عندك مخزن مركزي، أي كومبوننت يقدر “يقرا” منه و“يبعت” أكشن يغيّر البيانات… من غير ما يعدّي على شجرة props كلها.
مكوّنات Redux الأساسية
Store: المخزن المركزي للـ state.
Action: كائن بسيط { type, payload } بيحكي “عايز تعمل إيه”.
Reducer: دالة نقيّة بتاخد state + action وترجع state جديد (من غير Mutation).
Provider (من react-redux): يغلّف الـ App علشان كل المكوّنات تقدر توصل للـ store.
useSelector: تقرأ جزء من الـ state.
useDispatch: تبعت Actions تغيّر الـ state.
ليه “بدون Mutation”؟ علشان سهولة التتبّع، وmemoization، وperformance أفضل.
طيب… إمتى أستخدم localStorage؟
لو عندك بيانات لازم تفضل بعد الـ refresh (زي token أو تفضيلات بسيطة).
لكن ماينفعش تعامله كبديل لـ Redux: مفيش reactivity، ومش آمن، ومساحته محدودة.
لو محتاج Persist للـ Redux state، استخدم حلول مدروسة (زي middleware مخصّص أو مكتبات persist) بدل ما “تكتب/تقرا يدويًا” في كل مكان.
وهل في بدائل لِـ Redux؟
أيوه، حسب نوع البيانات:
React Context: بديل بسيط لمشاركة state محدود (بس مش مناسب لحالات updating الثقيلة).
Zustand / Jotai / Recoil / MobX: مكتبات إدارة حالة خفيفة ومريحة.
XState: لو عندك حالات معقّدة بـ state machine.
React Query / TanStack Query: للـ server state (جلب/Cache/Sync من API) — وده مختلف عن client state (UI, flags, selections).
📌 تابع البوست الجاي
استنى الجزء التاني عن Redux Toolkit: هنعرف إزاي ندير استدعاءات الـ API جوه Redux بطريقة منظمة، ونتعامل مع حالات تحميل البيانات (Loading)، وعرض النتيجة (Data)، والتعامل مع الأخطاء (Error) من غير ما نغرق الكومبوننتات بكود زيادة، وبأقل عدد ممكن من الأسطر.
✅ تابع الجروب عشان توصلك كل البوستات Code Sphere🎥 واشترك في القناة على يوتيوب عشان تشوف الشرح العملي خطوة
بخطوة. https://www.youtube.com/