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

مشكلة طباعة بعد تحديث React

عمر سالم2

السؤال

بعد التحديث، اصبحت بعض سطور الـ console.log تطبع مرتين. ما المشكلة هنا:

function getDerivedStateFromProps(nextProps, previousState) {
	if(previousState.name !== nextProps.name) {
      	// تتم الطباعة مرتين
		console.log('مرحبا'); 
		return { name: nextProps.name }
	}

	return {}
}

 

تم التعديل في بواسطة عمر سالم2
رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0

react يستخدم strict mode  في بيئة التطوير و في ال strict mode يشتغل كل من التالي مرتين 

  • مكونات الكلاس constructor,render,shouldComponentUpdate
  • getDerivedStateFromProps (انت استخدمت هذه)
  • جسد ال function component
  • الدوال التي تحدث setState
  • الدوال التي تعطى ل useState, useMemo,  useReducer
رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

هذا ما يدعى بالـ Strict Mode في React. اذا قمت بالنظر الى شجرة المكونات، ستجد ان هناك مكون بالشكل التالي:

function ExampleApplication() {
	return (
		<React.StrictMode>
			<div>
				<SomeComponent />
			</div>
		</React.StrictMode>
	);
}

يساعد الـ Strict Mode في:

  • تحديد المكونات ذات دورات الحياة غير الآمنة
  • الكشف عن الآثار الجانبية غير المتوقعة
  • الكشف عن API قديم مثل Context

الحل الأول هو ان تقوم بتعديل التطبيق بالتحديثات التي يتطلبها Strict Mode، او يمكنك حذفه واستخدام React.Fragment مكانه:

function ExampleApplication() {
	return (
		<React.Fragment>
			<div>
				<SomeComponent />
			</div>
		</React.Fragment>
	);
}

 

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

  • 0

هذا التكرار يحدث بسبب Strict Mode وهو في الاصل وضع ليجنبك كثير من المشاكل او التعقيدات التي من الممكن تجنبها وهذه  تستطيع استخدام .react fragment كالتالي 

render() {
  return (
    <React.Fragment>
      <ChildA />
      <ChildB />
      <ChildC />
    </React.Fragment>
  );
}

 يمكنك القراءة اكثر عن هذا الموضوع من docs الخاصة بالreact الموقع متوفر بالعربية ايضا https://reactjs.org/docs/strict-mode.html

 

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

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...