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

السؤال

نشر

كيف أقوم بتطبيق lifecycle hooks في functional component، في Class Component يمكنكي إستخدام الدوال مثل:

  • componentWillUnmount

  • componentDidMount

  • componentDidUpdate

  • shouldComponentUpdate

هل يمكن تطبيق نفس ما تفعله الدوال السابقة في functional component بأي طريقة مثل useEffect أم يجب علي أن أستعمل Class Component؟

Recommended Posts

  • 1
نشر

يمكنك تنفيذ هذا عن طريق استخدام useEffect hook

  1. componentDidMount
    useEffect(() => {
    	// الكود البرمجي هنا
    }, []); // هنا المصفوفة يجب أن تكون فارغة

     

  2. componentDidUpdate

    useEffect(() => {
    	// الكود البرمجي هنا
    }, [a, b]); //هنا المصفوفة يجب أن تحتوي على المتغيرات  التي بناء عليها سيتم عمل تحديث
    
    المتغيرا ت هي
    props - state

     

  3. componentWillUnmount

    useEffect(() => {
    	// الكود البرمجي هنا
      
      return () => { // قم باستخدام الدالة
      	// الأشياء التي تريد تنفيذها عند الخروج من المكون 
      }
    }, [a, b]); //هنا المصفوفة يجب أن تحتوي على المتغيرات  التي بناء عليها سيتم عمل تحديث
    
    المتغيرا ت هي
    props - state

     

  4. قم بإحاطة المكون الخاص بك ب React.memo حسب التوثيق الرسمي

    const Button = React.memo((props) => {
      // المكون الخاص بك
    });

     

  • 0
نشر
useEffect(() => {
 alert('سيتم الإستدعاء بعد كل ظهور ');
});
 
useEffect(() => {
 alert('سيتم الإستدعاء بعد الظهور الأول فقط');
}, []);
 
useEffect(() => {
 alert('سيتم الإستدعاء بعد أن تتغير قيمة أحد المتغيرين اللذين في المصفوفة');
}, [a, b]);

في الإستدعاء الثالث يمكنك إضافة متغير واحد على الأقل أو أكثر في المصفوفة

هناك أيضا ما يسمى بدالة التنظيف وتكون بعد return في دالة useEffect وفي دالة التنظيف تقوم بإزالة وتنظيف أشياء مثل eventListener أو setTimeOut بعد التخلص من المكون ودالة التنظيف هي مثل دالة ComponentWillUnmount

useEffect(() => {
  document.addEventListener('keydown', handleKeydown); // إضافة مستمع عندالضغط على زر
  return () => document.removeEventListener('keydown', handleKeydown); // دالة التنظيف وتقوم بإزالة المستمع السابق
});

 

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...