اذهب إلى المحتوى
  • 0

دالة useContext لا تقم بعمل re render

خالد مرتضى

السؤال

عندما استخدم خطاف useContext لا يتم حدوث re-render ع الرغم من تغيير الcontext في الreact-devtools

ودالة الreducer كالتالي

const addItem = (item) => {
    items[item.id] = item;
    setItems(items);
  }

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0

يحدث ذلك غالبًا بسبب أنك تقوم بتعيين نفس الstate , فبالنسبة لreact فإن الstate مازال قيمتها تساوي items حتى وإن تم تغيير قيمة أحد عناصرها فإنها مازالت تشير إلى ذات المكان في الذاكرة, يمكنك التغلب على تلك المشكلة عبر تغيير الstate كما بالشكل التالي:
 

const addItem = (item) => {
    items[item.id] = item;
    setItems({...items, item.id:item});
  }

بهذه الطريقة أنت لا تقوم بإرجاع نفس الstate بعد إضافة عنصر جديد, وإنما تقوم بنسخ عناصر الstate القديمة إلى state أخرى مع إضافة العنصر الجديد, فتتعرف react على أن الstate تم تغييرها وتشير إلى مكان أخر في الذاكرة فيتم تنفيذ الre-render

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

اذا كانت items هي ال state الخاص بذلك الجزء ففي react هذا يعد سئ جدا رغم انه في javascript طبيعي فطريقة تغييرك لل state items هنا

    items[item.id] = item;

ستسبب مشاكل ولن تعمل معك و في حالتك الحل ببساطة سيكون ان تستخدم setItems فقط بهذه الطريقة 

const addItem = (item) => {
    setItems((prev)=>({...prev, [item.id]:item}));
  }

يمكنك الاطلاع على هذا المقال فهو يوفر بعض المفاهيم القريبة للموضوع

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...