طابق الأداة مع نوع الحالة، بدلاً من الاستعانة بمتجر عام افتراضياً. معظم مشاكل "الحالة العامة" هي في الحقيقة استخدام الأداة الخاطئة للمهمة.
دليل القرار
text
Local UI state (toggle, input) → useState / useReducer
Shared, low-frequency (theme, user) → Context
Server/API data → React Query / SWR (NOT a global store)
Complex global client state → Zustand / Jotai / Redux Toolkit
URL-shareable state (filters, page) → the URL (search params)
الرؤية الأهم: حالة الخادم ≠ حالة العميل
البيانات من واجهة برمجية هي ذاكرة تخزين مؤقت للبيانات البعيدة، وليست حالة تملكها. وضعها في Redux يعني أنك تتعامل يدويًا مع التحميل وتخزين البيانات المؤقتة وإعادة الجلب والإلغاء — أمر مؤلم وعرضة للأخطاء. تقوم مكتبة حالة الخادم بكل ذلك:
jsx
{ data, isLoading } = ({ : [], : getTodos });
