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

توضيح الفرق بين state و props في React

علي يعقوب

السؤال

السلام عليكم 

ممكن تحكولي شو الفرق بين state and props لانو قرات كثير عنهم

وحاس انها الامور تلخبطت عندي ومشوشه 

ايضا الفرق بين useEffect and useState 

وما علاقة ال useEffect بال componentWillUnmount و componentDidMount

شكرا لكم .

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

Recommended Posts

  • 0

props: هي اختصار ل properties. وهي عبارة عن غرض Object يحوي بيانات، يتم تمريره لمكون React من مكون أب له.

لا نستطيع تغيير قيمة props فهي فقط للقراءة (قراءة قيمتها) وهي الخاصيات التي تظهر ونراها.

state: هي عبارة عن حالة البيانات التي تتغير خلال دورة حياة المكون (والتي يتم إعادة رسم المكون في حال تغييرها)

نستطيع تغيير قيمة state، لكن عن طريق الدوال المخصصة لها. this.setState.

مثال عن props:

لنفرض أنه لدينا الخصائص التالية للمكون Add:

هو مكون يقوم بجمع عددين n1,n2

function Add(props) {
  return (
    <div>
      {props.n1} + {props.n2} = {props.n1 + props.n2}
    </div>
  )
}

يتم تمريرهم كالتالي:

<Add n1={2} n2={3} />

لتكون props هنا:

props = {
	n1: 2,
	n2: 3
}

ونتيجة العرض:

2 + 3 = 5

____________

مثال عن state:

لنفرض أننا نريد استقبال دخل من المستخدم، وهو يتعلق بالمتغير n2:

function AddWithInput(props) {
  // تهيئة الحالة بقيمة 0 للمتغير
  // تعريف دالة خاصة بتغيير قيمة الحالة للمتغير
  const [n2, setN2] = React.useState(0)
  
  // الدالة التي تستمع لحدث التغيير
  function handleInputChange(event) {
    const input = event.target
    const newN2 = Number(input.value)
    // تغيير حالة n2
    setN2(newN2)
  }
  return (
    <div>
    // افترضنا أن الرقم الأول يتم تمريره من الأب أما الرقم الثاني من المستخدم
      {props.n1} +{' '}
    // حقل إدخال خاص بالرقم الثاني
      <input type="number" value={n2} onChange={handleInputChange} /> ={' '}
      {props.n1 + n2}
    </div>
  )
}

يمكننا استقبال props باستعمال خاصية destruction:

function AddWithInput({n1, initialN2 = 0}) {
  const [n2, setN2] = React.useState(initialN2)

فنكون قد قمنا بتعريف متغيرات مباشرة، لذلك يصبح باستطاعتنا استعمالها هكذا:

    <div>
      {n1} + {n2} = {n1 + n2}
    </div>
  return (
    <div>
      {n1} + <input type="number" value={n2} onChange={handleInputChange} /> ={' '}
      {n1 + n2}
    </div>
  )

 

إن كلاً من useState and useEffect تقوم على تحسين المكونات الدالية functional components لتصبح لها خاصيات مثل الأصناف.

useState:

يسمح للمكون بأن يكون له حالة، state ونصل لها مثل this.state (مثل المكونات الصفية) class component التي لها thsi

useEffect:

تضيف للمكونة الدالة lifecycle methods (دوال التحكم بدورة حياة المكون) مثل 

(componentDidMount, componentDidUpdate and componentWillUnmount)

عند استخدام useEffect:

الحالة المكافئة لـ componentDidMount : يتم تنفيذه عند إنشاء المكون:

useEffect(() => {

  },[]);// مصفوفة فارغة أي لا تراقب أي تغييرات

أما:

useEffect(() => {

},[x, y]); // تراقب تغييرات كل منها  وتقوم بالتحديث

أما: componentWillUnmount نعيد دالة مهمتها التنظيف و تعمل مثل callback function.

مثال: إزالة حدث الاستجابة لتحرك الفأرة:

useEffect(() => {
  window.addEventListener("mousemove", () => {});
  return () => {
    window.removeEventListener("mousemove", () => {})
  }
}, []);

باقِ الحالات:

useEffect( () => console.log("mount"), [] );

useEffect( () => console.log("will update data1"), [ data1 ] );

useEffect( () => console.log("will update any") );

useEffect( () => () => console.log("will update data1 or unmount"), [ data1 ] );

useEffect( () => () => console.log("unmount"), [] );

 

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

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...