React.memo يغلف مكون بحيث يتخطى إعادة التصيير عندما تكون خصائصه متساوية بشكل سطحي للعرض السابق. بشكل افتراضي، يعاد تصيير المكون الفرعي في كل مرة يعاد فيه تصيير المكون الأب؛ memo يختصر هذا عندما لم تتغير الخصائص بالفعل.
jsx
= .( () {
;
});
React.memo يغلف مكون بحيث يتخطى إعادة التصيير عندما تكون خصائصه متساوية بشكل سطحي للعرض السابق. بشكل افتراضي، يعاد تصيير المكون الفرعي في كل مرة يعاد فيه تصيير المكون الأب؛ memo يختصر هذا عندما لم تتغير الخصائص بالفعل.
= .( () {
;
});
memo يقوم بمقارنة سطحية. إذا كان المكون الأب يمرر كائن/مصفوفة/دالة جديدة في كل عرض، تفشل المقارنة دائماً وmemo لن يفعل شيئاً:
function List({ items }) {
// ❌ a NEW function every render → Row's onSelect prop always "changes"
return items.map(i => <Row key={i.id} item={i} onSelect={id => pick(id)} />);
}
احل المشكلة بجعل الدالة مستقرة باستخدام useCallback:
const onSelect = useCallback(id => pick(id), []); // same reference across renders
return items.map(i => <Row key={i.id} item={i} onSelect={onSelect} />);