سنبدأ بنظرة عامة موجزة عن React وصعودها إلى مكانة بارزة في مجتمع التطوير. بعد ذلك ، سوف نتعمق في أهمية المكونات القابلة لإعادة الاستخدام ومقارنة المكونات الوظيفية والفئوية من حيث قابلية إعادة الاستخدام.
لتوضيح المفاهيم ، سنقدم أمثلة للمكونات القابلة لإعادة الاستخدام والموجودة بشكل شائع في تطبيقات React ، مثل Button و Modal و Form Input. ستعرض هذه الأمثلة كيف يمكن تصميم المكونات لتكون مرنة وقابلة للتخصيص ويمكن إعادة استخدامها بسهولة.
بعد ذلك ، سنناقش أفضل الممارسات لتحقيق قابلية إعادة استخدام الكود في React. سنستكشف تقنيات مثل استخدام الدعائم والحالة لجعل المكونات أكثر مرونة ، وتخصيص المكونات من خلال الدعائم ، وإدارة بيانات المكون مع الحالة ، والجمع بين الدعائم والحالة لتحسين الوظائف.
بالإضافة إلى ذلك ، سنقدم مفهوم المكونات ذات الترتيب الأعلى (HOCs) كوسيلة لتلخيص المخاوف الشاملة وتعزيز قابلية إعادة الاستخدام. سنغطي كيفية استخدام المكوّنات ذات الترتيب الأعلى في التفاف المكونات ، وتكوين وظائف معقدة ، وفصل الاهتمامات بشكل فعال.
جدول المحتويات
لمحة موجزة عن React وشعبيتها
JavaScript الأمامية شيوعًا لبناء واجهات المستخدم. اكتسب React ، الذي طوره Facebook ، عددًا كبيرًا من المتابعين في مجتمع تطوير الويب نظرًا لبساطته ومرونته وقابليته للتوسع. يمكن أن تُعزى شعبية React إلى بنيتها القائمة على المكونات ، والتي تسمح للمطورين بتقسيم واجهات المستخدم المعقدة إلى أجزاء صغيرة قابلة لإعادة الاستخدام. يمكن بعد ذلك تكوين هذه المكونات الأصغر لإنشاء واجهات مستخدم أكثر شمولاً وتعقيدًا بسرعة.
ومع ذلك ، مع نمو حجم وتعقيد تطبيقات React ، يصبح من الصعب بشكل متزايد إدارة قاعدة الكود بشكل فعال. هذا هو المكان الذي تلعب فيه قابلية إعادة استخدام الكود. تشير قابلية إعادة استخدام الكود في React إلى ممارسة كتابة تعليمات برمجية قابلة لإعادة الاستخدام يمكن مشاركتها عبر أجزاء مختلفة من التطبيق ، وحتى عبر تطبيقات مختلفة. يساعد المطورين على توفير الوقت وتقليل الأخطاء وتحسين قابلية تطوير تطبيقاتهم وصيانتها.
في هذه المقالة ، سوف نستكشف كيفية تنفيذ قابلية إعادة استخدام الكود في React ، وأهميتها في التطوير الفعال والقابل للتطوير ، وأفضل الممارسات لتنفيذ قابلية إعادة استخدام الكود في مشاريع React. بنهاية هذه المقالة ، سيكون لديك فهم أفضل لكيفية دمج إعادة استخدام الكود في مشاريع React الخاصة بك لتطبيقات أكثر كفاءة وقابلية للتوسع.
مكونات التفاعل وأهميتها في إعادة الاستخدام
تُعد مكونات React جزءًا أساسيًا من تحقيق إمكانية إعادة استخدام الكود في تطبيق React. وهذا بدوره يؤدي إلى تنمية أكثر كفاءة وقابلية للتوسع.
عندما تكون المكونات قابلة لإعادة الاستخدام ، يمكن استيرادها بسهولة ودمجها في أجزاء مختلفة من التطبيق أو عبر تطبيقات مختلفة. ينتج عن هذا تطوير أكثر بساطة وتكرارًا أسرع للتطبيق.
مقارنة بين المكونات الوظيفية والفئة من حيث قابلية إعادة الاستخدام
المكوّنات الوظيفية والصنفية نوعان من المكوّنات في React ، ولكل منهما مزاياها وعيوبها عندما يتعلق الأمر بإمكانية إعادة الاستخدام.
المكونات الوظيفية
المكونات الوظيفية أبسط وأكثر وضوحًا من مكونات الفئة. يأخذون الدعائم كمدخلات ويعيدون عناصر واجهة المستخدم. نظرًا لعدم وجود طرق حالة أو دورة حياة لديهم ، فمن السهل اختبارها وصيانتها.
تتمثل إحدى الميزات المهمة للمكونات الوظيفية في أنها أكثر إيجازًا وأسهل في القراءة ، مما قد يكون مفيدًا في فهم الكود وإجراء التغييرات عليه. يمكن استخدامها أيضًا في المكونات ذات الترتيب الأعلى (HOCs) ، وهي وظائف قابلة لإعادة الاستخدام تغلف المكون وتوفر وظائف إضافية.
فيما يلي مثال لمكون وظيفي بسيط يعرض رسالة ترحيب:
function Welcome(props) {
return <h1>Hello, {props.name}!</h1>;
}
يمكن إعادة استخدام المكون أعلاه في جميع أنحاء التطبيق عن طريق تمرير قيم مختلفة لعنصر الاسم .
مكونات الفصل
من ناحية أخرى ، تتمتع مكونات الفصل بمزيد من الوظائف وأكثر قوة من المكونات الوظيفية. لديهم حالة تسمح لهم بإدارة بياناتهم وتحديث واجهة المستخدم الخاصة بهم بناءً على التغييرات في تلك البيانات. لديهم أيضًا طرق دورة الحياة ، والتي تسمح لهم بتنفيذ إجراءات معينة في نقاط محددة في دورة حياتهم ، مثل عند تركيب المكون أو عدم تركيبه.
عيب مكونات الفصل هو أنها مطولة وأصعب في القراءة من المكونات الوظيفية. يمكن أن تكون أيضًا أكثر صعوبة في الصيانة والاختبار نظرًا لحالتها وطرق دورة حياتها.
ومع ذلك ، يمكن إعادة استخدام مكونات الفئة بشكل كبير إذا تم تصميمها بشكل صحيح. من خلال فصل حالتها ووظائفها إلى طرق مختلفة ، يمكن أن تصبح مكونات الفئة أكثر نمطية وأسهل في إعادة الاستخدام. يمكن استخدامها أيضًا في المكوّنات ذات الترتيب الأعلى وتقديم الدعائم ، تمامًا مثل المكونات الوظيفية.
فيما يلي مثال لمكون الفصل الذي يعرض مؤقت العد التنازلي:
class Timer extends React.Component {
constructor(props) {
super(props);
this.state = { seconds: props.seconds };
}
tick() {
this.setState((state) => ({
seconds: state.seconds - 1,
}));
}
componentDidMount() {
this.interval = setInterval(() => this.tick(), 1000);
}
componentWillUnmount() {
clearInterval(this.interval);
}
render() {
return <div>Seconds remaining: {this.state.seconds}</div>;
}
}
في المكوِّن أعلاه ، تتم إدارة الحالة في المُنشئ وطريقة التجزئة () ، بينما يتعامل أسلوب دورة الحياة التابع componentDidMount () و componentWillUnmount () مع بدء تشغيل المؤقت وإيقافه. يمكن إعادة استخدام المكون بتمرير قيم مختلفة لعنصر الثواني .
أمثلة على المكونات القابلة لإعادة الاستخدام في React
فيما يلي بعض الأمثلة البرمجية للمكونات القابلة لإعادة الاستخدام في تطبيقات React المختلفة:
مكون الزر
مكون الزر هو مثال بسيط لمكون قابل لإعادة الاستخدام يمكن استخدامه في جميع أنحاء التطبيق. تعتبر الأزرار عنصرًا شائعًا في واجهة المستخدم في معظم التطبيقات ، ويمكن أن يؤدي إنشاء مكون منفصل لها إلى تبسيط الشفرة وجعلها أكثر قابلية لإعادة الاستخدام.
فيما يلي مثال على مكون زر في React:
function Button(props) {
return <button onClick={props.onClick}>{props.label}</button>;
}
في المكون أعلاه ، onClick و label عند استخدام المكون لتخصيص سلوك الزر ومظهره.
مكون مشروط
المكون الشرطي هو مثال آخر للمكون القابل لإعادة الاستخدام والذي يمكن استخدامه في أجزاء متعددة من التطبيق. تُستخدم النماذج بشكل شائع لعرض معلومات إضافية أو لمطالبة المستخدم باتخاذ إجراء.
فيما يلي مثال على إنشاء مكون لمكوِّن شرطي في React:
function Modal(props) {
return (
<div className="modal">
<div className="modal-content">{props.children}</div>
</div>
);
}
في المكون أعلاه ، child لتقديم محتوى المكونات الفرعية للشكل. يتيح ذلك تخصيص النموذج واستخدامه بسهولة في أجزاء مختلفة من التطبيق.
مكون إدخال النموذج
مكونات إدخال النموذج هي نوع من المكونات القابلة لإعادة الاستخدام والتي يمكن استخدامها لإنشاء أنواع مختلفة من مدخلات المستخدم والحقول ، مثل إدخال النص ، وإدخال كلمة المرور ، ومربع الاختيار ، وما إلى ذلك.
فيما يلي مثال لمكوِّن إدخال نموذج في React:
function FormInput(props) {
return (
<div>
<label>{props.label}</label>
<input type={props.type} value={props.value} onChange={props.onChange} />
</div>
);
}
في المكون أعلاه ، النوع والقيمة و onChange لتخصيص حقل الإدخال . يمكن استخدام هذا المكون لإنشاء أنواع مختلفة من حقول الإدخال عن طريق تمرير قيم مختلفة لهذه الخاصيات.
أفضل الممارسات لقابلية إعادة استخدام الكود في React
استخدام الدعائم والحالة لجعل المكونات أكثر مرونة
تعتبر الدعائم والحالة مفهومين أساسيين في React يسمحان للمطورين بإنشاء مكونات مرنة وقابلة لإعادة الاستخدام. باستخدام الدعائم والحالة ، يمكن تخصيص المكونات وتكييفها مع حالات الاستخدام المختلفة ، مما يجعلها أكثر تنوعًا وكفاءة. فيما يلي بعض أفضل الممارسات لاستخدام الخاصيات والحالة في مكونات React:
استخدام الدعائم لتخصيص المكونات
تُستخدم الدعائم لتمرير البيانات من مكون أصلي إلى مكون فرعي. باستخدام الدعائم ، يمكن تخصيص المكونات وجعلها أكثر مرونة. على سبيل المثال ، يمكن أن يحتوي أحد مكونات الزر على تسمية تسمح له بعرض نص مختلف على الزر.
فيما يلي مثال على مكون زر يستخدم الخاصيات لتخصيص التسمية:
function Button(props) {
return <button>{props.label}</button>;
}
في المكون أعلاه ، التسمية لتخصيص نص الزر. هذا يجعل مكون الزر أكثر تنوعًا وقابلية لإعادة الاستخدام.
استخدام الحالة لإدارة بيانات المكونات
يتم استخدام الحالة لإدارة البيانات داخل أحد المكونات. باستخدام الحالة ، يمكن جعل المكونات أكثر ديناميكية واستجابة. على سبيل المثال ، يمكن لمكون مؤقت العد التنازلي استخدام الحالة لتحديث واجهة المستخدم بوقت العد التنازلي الحالي. فيما يلي مثال على مكون مؤقت للعد التنازلي يستخدم الحالة لإدارة البيانات:
class Timer extends React.Component {
constructor(props) {
super(props);
this.state = { seconds: props.seconds };
}
tick() {
this.setState((state) => ({
seconds: state.seconds - 1,
}));
}
componentDidMount() {
this.interval = setInterval(() => this.tick(), 1000);
}
componentWillUnmount() {
clearInterval(this.interval);
}
render() {
return <div>Seconds remaining: {this.state.seconds}</div>;
}
}
في المكون أعلاه ، تُستخدم الحالة لإدارة الثواني ، والتي تُستخدم بعد ذلك لتحديث واجهة المستخدم بوقت العد التنازلي الحالي. هذا يجعل المكون أكثر مرونة وقابلية لإعادة الاستخدام ، حيث يمكن تخصيصه بأوقات عد تنازلي مختلفة.
استخدام الدعائم والحالة معًا
يمكن استخدام الدعائم والحالة معًا لجعل المكونات أكثر مرونة وتنوعًا. باستخدام الخاصيات لتمرير البيانات إلى مكون وحالة لإدارة تلك البيانات ، يمكن جعل المكونات تتكيف مع حالات الاستخدام المختلفة وتصبح أكثر ديناميكية. فيما يلي مثال لمكوِّن إدخال في النموذج يستخدم الخاصيّات والحالة معًا:
class FormInput extends React.Component {
constructor(props) {
super(props);
this.state = { value: props.value };
}
handleChange(event) {
this.setState({ value: event.target.value });
}
render() {
return (
<div>
<label>{this.props.label}</label>
<input
type={this.props.type}
value={this.state.value}
onChange={this.handleChange.bind(this)}
/>
</div>
);
}
}
في المكون أعلاه ، القيمة لإدارة قيمة حقل الإدخال ، بينما أدوات التسمية والنوع لتخصيص حقل الإدخال. هذا يجعل مكون إدخال النموذج أكثر مرونة وتنوعًا ، حيث يمكن تخصيصه باستخدام تسميات وأنواع إدخال مختلفة.
إنشاء مكونات ذات ترتيب أعلى (HOCs) للمخاوف الشاملة
المكونات ذات الترتيب الأعلى (HOCs) هي وظائف تأخذ مكونًا وتعيد مكونًا جديدًا بوظائف إضافية. يمكن استخدام المكوّنات ذات الترتيب الأعلى لتغليف الاهتمامات المتداخلة ، مثل المصادقة والتسجيل ومعالجة الأخطاء ، وجعلها قابلة لإعادة الاستخدام عبر المكونات المختلفة في التطبيق. فيما يلي بعض أفضل الممارسات لإنشاء المكوّنات ذات الترتيب الأعلى في React:
فصل المخاوف الشاملة إلى المراكز ذات الترتيب الأعلى
الاهتمامات الشاملة هي الوظائف التي يتم استخدامها عبر مكونات متعددة في التطبيق. تتضمن أمثلة الاهتمامات الشاملة المصادقة والتسجيل ومعالجة الأخطاء. من خلال فصل الاهتمامات المتداخلة إلى المكوّنات ذات الترتيب الأعلى ، يمكن تغليف الوظيفة في مكان واحد وجعلها أكثر قابلية لإعادة الاستخدام.
فيما يلي مثال على المسمى HOC الذي يوفر وظائف المصادقة:
function withAuth(WrappedComponent) {
return class extends React.Component {
constructor(props) {
super(props);
this.state = { isAuthenticated: false };
}
componentDidMount() {
// Perform authentication check here
const isAuthenticated = true; // replace with actual authentication check
this.setState({ isAuthenticated });
}
render() {
return this.state.isAuthenticated ? <WrappedComponent {...this.props} /> : null;
}
};
}
في المثال أعلاه ، withAuth HOC بإجراء فحص مصادقة ويعرض المكون المغلف فقط إذا كان المستخدم مصادقًا عليه. يمكن استخدام هذا المكوّن الإضافي لتوفير وظائف المصادقة لمكونات متعددة في التطبيق.
استخدام المكوّنات ذات الترتيب الأعلى لتغليف الوظائف
يمكن استخدام المكوّنات ذات الترتيب الأعلى لتغليف الوظائف المستخدمة عبر مكونات متعددة في أحد التطبيقات. من خلال تغليف الوظائف في المكوّنات ذات الترتيب الأعلى ، يمكن تبسيط الكود وجعله أكثر نمطية وسهولة في الصيانة.
فيما يلي مثال على أحد المكوّنات ذات الترتيب الأعلى الذي يوفر وظائف معالجة الأخطاء:
function withErrorHandling(WrappedComponent) {
return class extends React.Component {
constructor(props) {
super(props);
this.state = { error: null };
}
componentDidCatch(error, errorInfo) {
// Handle the error here
this.setState({ error });
}
render() {
return this.state.error ? <div>Error: {this.state.error.message}</div> : <WrappedComponent {...this.props} />;
}
};
}
في المثال أعلاه ، withErrorHandling HOC وظيفة معالجة الأخطاء التي يمكن استخدامها للقبض على الأخطاء ومعالجتها في مكونات متعددة في التطبيق. هذا يجعل الكود أكثر نمطية ويسهل صيانته.
استخدام المكوّنات ذات الترتيب الأعلى في التفاف المكونات
يمكن استخدام المكوّنات ذات الترتيب الأعلى في التفاف المكونات وإضافة وظائف إضافية. باستخدام HOCs لالتفاف المكونات ، يمكن إضافة الوظيفة إلى مكونات متعددة دون تغيير رمز المكون.
فيما يلي مثال على أحد المكوّنات ذات الترتيب الأعلى الذي يوفر قرص تحميل أثناء تحميل أحد المكونات:
function withLoading(WrappedComponent) {
return class extends React.Component {
constructor(props) {
super(props);
this.state = { isLoading: true };
}
componentDidMount() {
// Perform loading check here
setTimeout(() => {
this.setState({ isLoading: false });
}, 1000);
}
render() {
return this.state.isLoading ? <div>Loading...</div> : <WrappedComponent {...this.props} />;
}
};
}
في المثال أعلاه ، withLoading HOC زر تحميل يمكن استخدامه للإشارة إلى استمرار تحميل أحد المكونات. يمكن استخدام هذا المكوّن الإضافي (HOC) لتغليف مكونات متعددة في التطبيق ، مما يجعلها أكثر سهولة في الاستخدام وتحسين تجربة المستخدم.
يؤلف المكوّنات ذات الترتيب الأعلى لوظائف أكثر تعقيدًا
يمكن تكوين المكوّنات ذات الترتيب الأعلى لإنشاء وظائف أكثر تعقيدًا. من خلال الجمع بين العديد من المراكز ذات الترتيب الأعلى ، يمكن للمطورين إنشاء وظائف جديدة يمكن استخدامها عبر مكونات مختلفة في التطبيق.
فيما يلي مثال على المكوّنات ذات الترتيب الأعلى التي تؤلف withAuth و withLoading HOCs:
function withAuthenticatedLoading(WrappedComponent) {
const AuthenticatedLoading = withAuth(withLoading(WrappedComponent));
return AuthenticatedLoading;
}
في المثال أعلاه ، يؤلف withAuthenticatedLoading withAuthenticatedLoading HOCs لتوفير وظائف المصادقة والتحميل إلى أحد المكونات . يمكن استخدام هذا المكوّن الإضافي لإنشاء مكونات تتطلب كلاً من المصادقة ووظيفة التحميل.
استخدم دعائم التجسيد لتكوين المكون
تعتبر دعائم التجسيد تقنية قوية في React تسمح للمكونات بمشاركة التعليمات البرمجية والوظائف مع المكونات الأخرى. باستخدام دعائم التصيير ، يمكن تكوين المكونات وتخصيصها بطريقة مرنة وفعالة. فيما يلي بعض أفضل الممارسات لاستخدام أدوات العرض في تطبيق React الخاص بك:
استخدام دعائم التجسيد لمشاركة الرمز
Render props هي تقنية تسمح للمكون بمشاركة الكود مع مكون آخر عن طريق تمرير وظيفة كخاصية. يمكن للمكوِّن المستلم بعد ذلك استدعاء الوظيفة للوصول إلى الرمز المشترك.
فيما يلي مثال لمكون يستخدم خاصية عرض لمشاركة الكود:
class Mouse extends React.Component {
constructor(props) {
super(props);
this.state = { x: 0, y: 0 };
}
handleMouseMove = (event) => {
this.setState({
x: event.clientX,
y: event.clientY,
});
};
render() {
return <div onMouseMove={this.handleMouseMove}>{this.props.render(this.state)}</div>;
}
}
في المثال أعلاه ، Mouse خاصية تقديم لمشاركة x و y للماوس مع مكون فرعي. يمكن للمكوِّن الفرعي الوصول إلى x و y عن طريق استدعاء الوظيفة التي تم تمريرها كعنصر عرض .
استخدام دعائم التجسيد لتكوين المكونات
يمكن استخدام دعائم التقديم لتكوين المكونات بطريقة مرنة وفعالة. باستخدام دعائم التصيير ، يمكن تخصيص المكونات وتكوينها بطريقة غير ممكنة مع التقنيات الأخرى.
فيما يلي مثال لمكون يستخدم خاصية تقديم لتكوين مكون آخر:
class Toggle extends React.Component {
constructor(props) {
super(props);
this.state = { on: false };
}
toggle = () => {
this.setState({ on: !this.state.on });
};
render() {
const { children } = this.props;
return children({ on: this.state.on, toggle: this.toggle });
}
}
في المثال أعلاه ، Toggle خاصية تقديم لتكوين مكون آخر. يمكن للمكوِّن الفرعي الوصول إلى التشغيل ووظيفة التبديل عن طريق استدعاء الوظيفة التي تم تمريرها كعنصر فرعي .
استخدام دعائم التقديم للتخصيص
يمكن استخدام دعائم التقديم للتخصيص من خلال السماح بتكوين المكونات بطريقة مرنة وفعالة. باستخدام دعائم التصيير ، يمكن تخصيص المكونات بوظائف وخيارات مختلفة.
فيما يلي مثال لمكون يستخدم خاصية عرض للتخصيص:
class Button extends React.Component {
render() {
const { children, onClick } = this.props;
return <button onClick={onClick}>{children}</button>;
}
}
class App extends React.Component {
render() {
return (
<Button onClick={() => console.log("Button clicked!")}>
{({ onClick }) => <span onClick={onClick}>Click me!</span>}
</Button>
);
}
}
في المثال أعلاه ، Button خاصية عرض للسماح بالتخصيص. يخصص مكون التطبيق مكون الزر باستخدام معالج حدث نقر مختلف وعنصر تابع.
إليك مثال آخر على Toggle الذي يستخدم العرض :
import React from "react";
class Toggle extends React.Component {
constructor(props) {
super(props);
this.state = { on: false };
}
toggle = () => {
this.setState({ on: !this.state.on });
};
render() {
const { render } = this.props;
return <div onClick={this.toggle}>{render(this.state)}</div>;
}
}
function App() {
return (
<Toggle
render={({ on }) => (
<div>{on ? "The toggle is on" : "The toggle is off"}</div>
)}
/>
);
}
export default App;
في هذا المثال ، يأخذ المكوِّن Toggle عرض وهي دالة. خاصية العرض كائنًا on كمعامل وتعيد JSX ليتم تقديمه. المكون Toggle بتبديل التشغيل عند النقر فوقه ويمرر الحالة المحدثة إلى العرض . يعرض مكوِّن التطبيق المكوِّن Toggle ويمرر العرض إليه.
عند النقر على مكون Toggle التشغيل ويمرر الحالة المحدثة إلى العرض . وظيفة عرض الخاصية بعد ذلك بإرجاع JSX المناسب بناءً على on . في هذا المثال ، ترجع دالة العرض الخاصة إما "التبديل قيد التشغيل" أو "التبديل متوقف".

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