يمكن أن يكون حفر الدعامة خدعة مفيدة ، ولكن عليك الانتباه لبعض المزالق المحرجة.

تعد إدارة البيانات وبناء تطبيقات قوية وقابلة للصيانة من مهارات تطوير البرامج الحيوية. من الطرق الشائعة لتعديل تطبيقات React الخاصة بك استخدام خاصية الحفر ، والتي تساعد على تمرير البيانات إلى أسفل شجرة المكونات.

ولكن ، مع زيادة حجم المشاريع ، يمكن أن يكون لحفر الدعامة عيوبه. استكشف المشكلات المحيطة بحفر الدعامة واكتشف البدائل المتاحة.

فهم حفر الدعامة

حفر الدعامة عبارة عن تقنية تمرر البيانات إلى أسفل شجرة المكونات كدعامات ، بغض النظر عما إذا كانت المكونات الوسيطة تحتاج إلى البيانات أم لا.

يتضمن الحفر تمرير الدعائم من أحد الوالدين إلى مكوناته الفرعية ، ثم إلى أسفل التسلسل الهرمي. الهدف الرئيسي هو تمكين المكونات في المستويات الأدنى من الشجرة للوصول إلى البيانات التي توفرها المكونات ذات المستوى الأعلى واستخدامها.

سلبيات حفر الدعامة

بينما يحل الحفر الدعائي مشكلة مشاركة البيانات ، فإنه يقدم العديد من العيوب التي يمكن أن تعوق إمكانية صيانة الكود وكفاءة التطوير.

1. زيادة التعقيد

مع نمو التطبيق ، تصبح إدارة الحفر الدعائي أكثر صعوبة. يمكن أن يؤدي ذلك إلى شبكة معقدة من تبعيات المكونات ، مما يجعل من الصعب فهم الشفرة وتغييرها.

instagram viewer

import ChildComponent from'./ChildComponent';

exportdefaultfunctionParentComponent = () => {
const data = 'Prop drilling!';
return ( <div><ChildComponentdata={data} />div> );
};

import GrandChildComponent from'./GrandChildComponent';

exportdefaultfunctionChildComponent = ({ data }) => {
return ( <div><GrandChildComponentdata={data} />div> );
};

import GreatGrandChildComponent from'./GreatGrandChildComponent';

exportdefaultfunctionGrandChildComponent = ({ data }) => {
return ( <div><GreatGrandChildComponentdata={data} />div> );
};

exportdefaultfunctionGreatGrandChildComponent = ({ data }) => {
return ( <div><p>{data}p>div> );
};

هنا ، تنتقل البيانات من ParentComponent ذي المستوى الأعلى إلى GreatGrandChildComponent من خلال مكونين وسيطين.

مع نمو التسلسل الهرمي للمكونات بشكل أعمق ، واعتماد المزيد من المكونات على الخاصيات ، يصبح من الصعب تتبع تدفق البيانات وإدارته.

2. اقتران ضيق

يحدث هذا عندما تعتمد المكونات على بعضها البعض عبر الدعائم ، مما يجعل من الصعب تغييرها أو إعادة استخدامها. هذا يمكن أن يجعل من الصعب إجراء تغييرات على أحد المكونات دون التأثير على المكونات الأخرى.

import ChildComponentA from'./ChildComponentA'; 
import ChildComponentB from'./ChildComponentB';

exportdefaultfunctionParentComponent = () => {
const sharedData = 'Shared data';

 return (




</div>
 );
};

import GrandChildComponent from'./GrandChildComponent';

exportdefaultfunctionChildComponentA = ({ data }) => {
return (


Component A</p>

</div>
 );
};

import GrandChildComponent from'./GrandChildComponent';

exportdefaultfunctionChildComponentB = ({ data }) => {
return (


Component B</p>

</div>
 );
};

exportdefaultfunctionGrandChildComponent = ({ data }) => {
return (

<p>{data}p> </div>
 );
};

هنا ، يتلقى كلا المكونين التابعين نفس البيانات من المكون الأصلي الخاص بهما ويمررها إلى GrandChildComponent.

إذا تم تحديث البيانات ، فإن جميع المكونات في التسلسل الهرمي تحتاج أيضًا إلى التحديث ، حتى إذا لم يستخدم بعضها البيانات. قد يكون هذا صعبًا ويستغرق وقتًا طويلاً ، كما أنه يزيد من خطر إدخال الأخطاء.

3. استدامة الكود

يعد حفر العناصر مشكلة في صيانة الكود لأن المكونات الجديدة تحتاج إلى الوصول إلى الدعائم التي تم تمريرها عبر التسلسل الهرمي. يمكن أن يؤدي هذا إلى حدوث أخطاء إذا كنت بحاجة إلى تعديل العديد من المكونات وتناقضات إذا تغيرت الدعائم.

import ChildComponent from'./ChildComponent'; 

exportdefaultfunctionParentComponent = () => {
const [count, setCount] = useState(0);

const incrementCount = () => {
setCount(count + 1);
};

return (



</div>
 );
};

import GrandChildComponent from'./GrandChildComponent';

exportdefaultfunctionChildComponent = ({ count, incrementCount }) => {
return (


exportdefaultfunctionGrandChildComponent = ({ count }) => {
return (


Count: {count}</p>
</div>
 );
};

هنا يقوم ParentComponent بتمرير قيمة العد كأداة مساعدة إلى ChildComponent ثم إلى GrandChildComponent.

ولكن ، إذا تغير العدد أو إذا كانت هناك قاعدة جديدة لتمرير خاصيات إضافية ، فستحتاج إلى تحديث كل مكون في التسلسل الهرمي الذي يستخدم الخاصية. هذه العملية عرضة للخطأ ، مما يجعل صيانة الكود أمرًا صعبًا ويزيد من التناقضات أو الأخطاء.

استكشاف بدائل حفر الدعامة

هناك العديد من حلول إدارة الحالة في نظام React البيئي والتي يمكنك استخدامها للتغلب على عيوب الحفر الداعم.

تفاعل السياق

سياق React هو ميزة تتيح مشاركة الحالة عبر المكونات دون تمرير الخاصيات. يوفر متجرًا مركزيًا يمكن للمكونات الوصول إليه باستخدام خطاف useContext. يمكن أن يؤدي ذلك إلى تحسين الأداء وتسهيل إدارة الحالة.

إعادة

إعادة هي مكتبة إدارة الدولة التي توفر مخزن دولة عالمي واحد. يمكن للمكونات الوصول إلى الحالة وتحديثها من خلال الإجراءات والمخفضات. يمكن أن يساعد ذلك في الحفاظ على تنظيم الكود الخاص بك ويمكن أن يسهل تصحيح الأخطاء.

MobX

MobX هي مكتبة إدارة الدولة التي تستخدم البيانات التي يمكن ملاحظتها. هذا يعني أنه يمكن للمكونات الاشتراك في التغييرات في الحالة والتصرف استجابةً لذلك. يمكن للمكتبة أن تجعل التعليمات البرمجية أكثر تفاعلاً ويمكن أن تحسن الأداء.

جوتاي

Jotai هي مكتبة إدارة حكومية لـ Reactيستخدم نموذج الحالة الذرية. يسمح لك بإنشاء ذرات الحالة التي يمكن للمكونات الوصول إليها وتحديثها.

مع Jotai ، يمكنك تقليل الحاجة إلى الحفر الداعم وتحقيق نهج إدارة حالة أكثر بساطة وفعالية. تصميمه البسيط وتركيزه على الأداء يجعله خيارًا مقنعًا لإدارة الحالة في تطبيقات React.

حفر الدعامة هو أسلوب لتمرير البيانات من المكونات الرئيسية إلى المكونات الفرعية. إنه فعال لمشاركة البيانات ، ولكن له العديد من العيوب التي يمكن أن تجعل من الصعب الحفاظ على التعليمات البرمجية وتطويرها.

للتغلب على هذه العوائق ، يمكنك استخدام بدائل مثل React Context و Redux و MobX. توفر هذه الحلول طريقة أكثر مركزية لإدارة البيانات ، مما يجعل التعليمات البرمجية أكثر قابلية للصيانة والتوسع.