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

السؤال

نشر (معدل)

بعد التحديث، اصبحت بعض سطور الـ 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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...