إذا كنت في عالم React لفترة من الوقت، فمن المحتمل أنك سمعت عبارة "إنها مجرد JavaScript" يتم طرحها. على الرغم من أن هذا صحيح، إلا أنه لا يعني أننا لا نستطيع الاستفادة من بعض الأنماط المجربة والحقيقية لجعل تطبيقات React الخاصة بنا أكثر قابلية للصيانة وإعادة الاستخدام وممتعة تمامًا للعمل معها. دعنا نتعمق في بعض أنماط التصميم الأساسية التي يمكن أن تنقل مكونات React الخاصة بك من "meh" إلى "marvel"!
قبل أن نبدأ، دعونا نتناول المشكلة الموجودة في الغرفة: لماذا نهتم بأنماط التصميم على الإطلاق؟ حسنًا، يا زملائي المتحمسين لـ React، أنماط التصميم تشبه الوصفات السرية لعالم البرمجة. إنها حلول تم اختبارها في المعركة للمشاكل الشائعة التي يمكنها:
الآن بعد أن أصبحنا على نفس الصفحة، دعنا نستكشف بعض الأنماط التي ستجعل مكونات React الخاصة بك تتألق أكثر من سيارة رياضية مشمعة حديثًا!
يعد النموذج المكون لـ React بالفعل نمطًا قويًا في حد ذاته، ولكن المضي قدمًا في التركيب يمكن أن يؤدي إلى تعليمات برمجية أكثر مرونة وقابلة لإعادة الاستخدام.
// Instead of this: const Button = ({ label, icon, onClick }) => ( ); // Consider this: const Button = ({ children, onClick }) => ( ); const IconButton = ({ icon, label }) => ( );
لماذا هو رائع:
نصيحة احترافية: فكر في مكوناتك على أنها مكعبات LEGO. كلما كانت أكثر تركيبًا وقابلية للتركيب، زادت روعة الهياكل التي يمكنك بنائها!
يفصل هذا النمط منطق المكون الخاص بك عن العرض التقديمي، مما يسهل التفكير والاختبار.
// Container Component const UserListContainer = () => { const [users, setUsers] = useState([]); useEffect(() => { fetchUsers().then(setUsers); }, []); return; }; // Presentational Component const UserList = ({ users }) => (
لماذا يهتز:
تذكر: الحاويات تشبه طاقم المسرح الموجود خلف الكواليس، حيث يتعاملون مع جميع الأعمال التي تتم خلف الكواليس، في حين أن مكونات العرض التقديمي هم الممثلون، الذين يركزون فقط على المظهر الجيد للجمهور.
الوظائف ذات الترتيب الأعلى هي وظائف تأخذ مكونًا وتعيد مكونًا جديدًا مع بعض الوظائف المضافة. إنها بمثابة عمليات تعزيز لمكوناتك!
const withLoader = (WrappedComponent) => { return ({ isLoading, ...props }) => { if (isLoading) { return; } return ; }; }; const EnhancedUserList = withLoader(UserList);
لماذا هو رائع:
كلمة تحذير: على الرغم من أن المكونات ذات الترتيب الأعلى قوية، إلا أنها يمكن أن تؤدي إلى "جحيم الغلاف" إذا تم الإفراط في استخدامها. استخدمها بحكمة!
يتضمن هذا النمط تمرير دالة كدعم إلى مكون، مما يمنحك المزيد من التحكم في ما يتم تقديمه.
const MouseTracker = ({ render }) => { const [position, setPosition] = useState({ x: 0, y: 0 }); const handleMouseMove = (event) => { setPosition({ x: event.clientX, y: event.clientY }); }; return ({render(position)}); }; // Usage( The mouse is at ({x}, {y})
)} />
لماذا هو أنيق:
حقيقة طريفة: يتميز نمط عناصر العرض بالمرونة الشديدة، ويمكنه أيضًا تنفيذ معظم الأنماط الأخرى التي ناقشناها!
الخطافات هي العناصر الجديدة في الكتلة في React، وتسمح لك الخطافات المخصصة باستخراج منطق المكونات إلى وظائف قابلة لإعادة الاستخدام.
const useWindowSize = () => { const [size, setSize] = useState({ width: 0, height: 0 }); useEffect(() => { const handleResize = () => { setSize({ width: window.innerWidth, height: window.innerHeight }); }; window.addEventListener('resize', handleResize); handleResize(); // Set initial size return () => window.removeEventListener('resize', handleResize); }, []); return size; }; // Usage const MyComponent = () => { const { width, height } = useWindowSize(); returnWindow size: {width} x {height}; };
لماذا هو مذهل:
نصيحة احترافية: إذا وجدت نفسك تكرر منطقًا مشابهًا في مكونات متعددة، فقد يكون الوقت قد حان لاستخراجه في رابط مخصص!
تشبه أنماط التصميم في React وجود حزام أدوات مليء بالأدوات الذكية - فهي تمنحك الأداة المناسبة للمهمة، بغض النظر عن التحديات التي يواجهها تطبيقك. يتذكر:
من خلال دمج هذه الأنماط في مجموعة أدوات React الخاصة بك، ستكون في طريقك لإنشاء مكونات أكثر أناقة وقابلية للصيانة وإعادة الاستخدام. سوف تشكرك شخصيتك المستقبلية (وزملائك في الفريق) عندما يتصفحون قاعدة التعليمات البرمجية جيدة التنظيم!
تعليمات سعيدة!
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3