useCallback دالة الاستجابة المخزَّنة

آخر تحديث: 2026-11-03

useCallback دالة الاستجابة المخزَّنة

يخزّن useCallback مرجع دالة: ما دامت الاعتماديات كما هي يعيد الدالة نفسها. وحين تسلّم دالة استجابة كهذه إلى مكوّن ابن مُخزَّن تمنع الأب من إعادة عرض الابن بلا سبب، لأن مرجع الدالة المُنشأ حديثاً يكسر المقارنة السطحية داخل memo دائماً. وخارج هذا النوع من المستهلكين لا تفيد الذاكرة المؤقتة شيئاً، فلا يُستدعى إلا حين يكون المرجع الثابت هو المهمّ فعلاً.

المجموعةالآثار الجانبية والأداء
النوعخطاف
منذ الإصدارReact 16.8

ℹ️ ملاحظة يحوّل المحرّر JSX إلى JavaScript ويعرض الواجهة الحقيقية داخل بيئة معزولة؛ تُركَّب المكوّنات تلقائياً دون استدعاء render يدوي.

📝 الصيغة

const handleClick = useCallback((id) => {
  removeItem(id)
}, [removeItem])   // اذكر الاعتماديات التي تستخدمها

// تكافئ useMemo(() => handleClick, deps)

⚙️ المعاملات

fnالدالة المراد تخزينها (معالج حدث، أو دالة استجابة تُمرَّر إلى مكوّن ابن، وما شابه).
depsمصفوفة الاعتماديات: أي تغيّر يعيد دالة جديدة، وإلا فالفهرس السابق هو المُعاد.

القيمة المرجعة:يعيد مرجع الدالة المخزّنة: ما دامت الاعتماديات لا تتغيّر، يتلقّى كل عرض الدالة نفسها.

▶ مثال

المثال يعمل مباشرة: يُعرض تلقائياً عند التوسيع وتظهر التعديلات فوراً.

الناتج:

أثناء كتابتك في الحقل لم تعد الطرفية تطبع «Rendered: Count +1» — فمرجع onClick ثابت فيتخطّى المكوّن الابن المُخزَّن إعادة العرض؛ ويظلّ الضغط على الزر يزيد العدّاد.

💡 النقاط الأساسية

💡 نصيحة ‏useCallback(fn, deps) مجرد اختصار لـ useMemo(() => fn, deps)، فالاثنان يخزّنان مرجعاً.
⚠️ تحذير بلا مكوّن ابن مُخزَّن أو مستهلك يعتمد على المصفوفة، يكون useCallback عبئاً خالصاً.
ℹ️ ملاحظة الاعتمادية الناقصة تجعل الدالة تغلق على بيانات بائتة — وهي قواعد الاعتماديات نفسها في useEffect؛ وفضّل التحديثات الدالية للحالة لتقصّر القائمة.
المزيد من الحالات قريباً.

📚 دروس ذات صلة

❓ الأسئلة الشائعة

س متى أحتاج useCallback فعلاً؟
ج حين تُمرَّر دالة الاستجابة إلى ابن ملفَّف بـ memo، أو تُستخدم كاعتمادية لـ useEffect أو useMemo — فالمرجع الثابت له معنى في هذين الموضعين فقط.
س ماذا لو كانت useCallback(fn, []) تقرأ حالة بائتة؟
ج انتقل إلى تحديث دالي مثل setCount(c => c + 1) لا يعتمد على أي قيمة خارجية؛ وحين تحتاج القيمة القديمة فعلاً، أدرِجها كاعتمادية.
س ما صلة ذلك بـ useMemo؟
ج ‏useCallback هو الحالة الخاصة بدالة من useMemo: أحدهما يخزّن قيمة والآخر يخزّن مرجع دالة، والآلية تحتهما واحدة.
Web-Tutorial.com

فريق Web-Tutorial التقني

منصة دروس برمجية يديرها عدة مطورين. كل درس يتم كتابته ومراجعته بواسطة مطورين متخصصين في المجال. نعمل على ضمان دقة وموثوقية المحتوى — إذا لاحظت أي مشكلة، فيرجى إخبارنا.

100%