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

السؤال

نشر

أتابع دورة React ويقوم المدرب في بعض الأحيان بتمرير props إلى دالة super داخل التابع constructor في مكون من نوع class component بهذا الشكل:

// أحيانًا بهذه الطريقة
class TestComponent extends React.Component {
  constructor(props) {
    super();
  }
}

// وأحبانًا أخرى بالطريقة التالية
class TestComponent extends React.Component {
  constructor(props) {
    super(props);
  }
}

ما الفرق بين الطريقتين؟ وهل ستسبب مشكلة إن إستخدمت طريقة مكان الأخرى؟

Recommended Posts

  • 0
نشر

الفرق الوحيد بينهما  هو أنك في حالة تمرير props الى super سوف تتمكن من الدخول الى this.props داخل ال constructor نفسها

class MyComponent extends React.Component {    
    constructor(props) {
        super(props)

        console.log(this.props)
        //يمكنك قراءتها
      
      console.log(props)
        //يمكنك قراءتها
    }
}

وفي حالة لم تقم بتمرير props الى super لا يمكنك الدخول الى this.props داخل ال constructor

class MyComponent extends React.Component {    
    constructor(props) {
        super(props)

        console.log(this.props)
        //لا يمكنك قراءتها
      
      console.log(props)
        //يمكنك قراءتها
    }
}

لكن هذا لن يؤثر على قدرتك للدخول الى this.props خارج ال constructor

  • 0
نشر

نستخدم الطريقة الثانية في حالة واحدة فقط وهي أن كمن بحاجة إلى إستخدام this.props في التابع constructor

class TestComponent extends React.Component {    
    constructor(props) {
        super(props)
      
        // السطر التالي سيعمل بشكل صحيح
        console.log(this.props)
    }
}

وفي حالة إستخدام الطريقة الأولى ستكون النتيجة undefined:

class TestComponent extends React.Component {    
    constructor(props) {
        super()

        console.log(this.props)	// Output: undefined

        // مازال بإمكانك إستخدام props
        console.log(props)
    }
}

لاحظ إن تمرير props إلى الدالة super أو عدم تمريرها لن يؤثر على إستخدام this.props في باقي التوابع مثل render أو كل توابع Lifecycle hooks، بمعنى أنها ستعمل بدون مشكلة في كلتا الحالتين.
كما أن موقع React الرسمي ينصح بتمرير props دائمًا في المكونات من نوع Class:

اقتباس

Class components should always call the base constructor with props

بالتوفيق.

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...