Provider Pattern نمط Provider
آخر تحديث: 2026-11-03
Provider Pattern نمط Provider
يحزم نمط Provider البيانات وطرق تغييرها في مكوّن Provider حامل للحالة مع خطّاف مخصّص مقابل: تعيش الحالة داخل useState أو useReducer، وتُسلَّم إلى الأسفل عبر Context، ولا يتعامل العالم الخارجي إلا مع قراءات وكتابات useXxx(). يملك Provider الحالة ويقرّر أين تنطبق، ويكشف الخطّاف واجهة مرتّبة، أما المكوّنات في الوسط فلا تعلم أصلاً بأن سياقاً موجود.
| المجموعة | أنماط المكونات |
|---|---|
| النوع | نمط |
ℹ️ ملاحظة يحوّل المحرّر JSX إلى JavaScript ويعرض الواجهة الحقيقية داخل بيئة معزولة؛ تُركَّب المكوّنات تلقائياً دون استدعاء render يدوي.
📝 الصيغة
const Ctx = createContext(null)
export function AppProvider({ children }) {
const [state, setState] = useState(initial)
return <Ctx.Provider value={{ state, setState }}>{children}</Ctx.Provider>
}
export const useApp = () => useContext(Ctx) // خطّاف القراءة المقابل
القيمة المرجعة:لا قيمة معادة؛ فهذه المدخلات تصف نمط برمجة لا دالة.
▶ مثال
المثال يعمل مباشرة: يُعرض تلقائياً عند التوسيع وتظهر التعديلات فوراً.
الناتج:
بعد الضغط على الزر تقرأ سلة التسوق «Cart (1): Apple» فوراً — تُدار الحالة في CartProvider بينما تقرأ ItemList وتكتبها عبر useContext.
💡 النقاط الأساسية
💡 نصيحة Provider مع useContext مع خطّاف مخصّص هو الثلاثي القياسي للحالة العامة الخفيفة المصنوعة يدوياً؛ والمشاريع الصغيرة لا تحتاج Redux.
ℹ️ ملاحظة ضع الحالة ودالة التحديث معاً في القيمة حتى يقرأ المستهلكون ويكتبون في خطوة واحدة؛ وضع Provider عند أقرب سلف مشترك يحتاجه.
⚠️ تحذير حين تكون القيمة كائناً مضمّناً، يعيد كل عرض للProvider عرض كل المستهلكين — ثبّتها بـ useMemo.
🏷️ المزيد من أنماط المكونات
💡 حالات ذات صلة
المزيد من الحالات قريباً.
📚 دروس ذات صلة
❓ الأسئلة الشائعة
س أين ينبغي أن يجلس Provider في شجرة المكوّنات؟
ج عند أقرب سلف مشترك لكل المستهلكين؛ فكلما ضاق النطاق قلّت عمليات إعادة العرض غير الضرورية.
س لماذا أغلّف القيمة بـ useMemo؟
ج الكائن المضمّن مرجع جديد في كل عرض، فيجبر كل مستهلك على إعادة العرض؛ و useMemo يخزّن المرجع ويمنع ذلك.
س كيف يختلف نمط Provider عن Redux؟
ج نمط Provider قدرة مدمجة في React تناسب التطبيقات الصغيرة والمتوسطة؛ أما Redux فيضيف خط إجراءات موحّداً ووسيطاً وأدوات تصحيح للتطبيقات الكبيرة.