useCallback vs useMemo

باختصار الفرق في إيه اللي بيتم تحسينه.

📌 الـ useMemo:

  • بتحفظ نتيجة الدالة (زي قيمة أو حساب معين) عشان مش كل مرة يتم حسابه لما الصفحة يتعملها إعادة تحميل.

  • مفيدة لو عندك عملية حسابية تقيلة وعايزها تتنفذ بس لما حاجات معينة تتغير.

const memoizedValue = useMemo(() => computeExpensiveValue(a, b), [a, b]);

هنا الدالة computeExpensiveValue هتشتغل بس لو a أو b اتغيروا.


📌 الـ useCallback:

  • بتحفظ الدالة نفسها عشان مش كل مرة يتم إنشائها لما الصفحة يحصلها إعادة تحميل، وده بيساعد في منع إعادة تحميل الـ Components الفرعية اللي معتمدة على الدالة دي.
const memoizedCallback = useCallback(() => doSomething(a, b), [a, b]);

الدالة هيتعملها إعادة إنشاء بس لو a أو b اتغيروا.


بمعنى أبسط:

⚡️ الـ useMemo بتحفظ القيم.

⚡️ الـ useCallback بتحفظ الدوال.


المقال ده موضح الفرق بالتفصيل:

https://www.freecodecamp.org/news/difference-between-usememo-and-usecallback-hooks