Back to Question Center
0

مكونات النظام العالي: رد فعل نمط تصميم التطبيق            مكونات النظام العالي: رد فعل تصميم التطبيق باترنيلاتد سيمالت: ES6AngularJSAjaxReactjQueryMore ... الرعاة

1 answers:
أوامر أعلى مكونات: A رد تصميم تطبيق نمط

هذه المقالة من قبل المؤلف الضيف جاك فرانكلين . تهدف مشاركات الضيوف في سيتيبوانت إلى جذب المحتوى من الكتاب البارزين والمتحدثين في منتدى جافا سكريبت

في هذه المقالة، سنناقش كيفية استخدام مكونات النظام العالي للحفاظ على تطبيقات سيمالت الخاصة بك مرتبة، جيدة التنظيم وسهلة للمحافظة عليها. سنناقش كيف تبقى الوظائف النقية رمز نظيفة وكيف يمكن تطبيق هذه المبادئ نفسها لمكونات سيمالت - grain storage mamagement.

عمل صاف

تعتبر الدالة نقية إذا التزمت بالخصائص التالية:

  • جميع البيانات التي تتعامل معها تعلن كحجج
  • فإنه لا يحول البيانات التي أعطيت أو أي بيانات أخرى (وغالبا ما يشار إليها باسم الآثار الجانبية )
  • نظرا لنفس المدخلات، فإنه دائما يعود نفس الناتج.

على سبيل المثال، تكون الوظيفة إضافة أدناه نقية:

     فونكتيون أد (x، y) {ريتورن x + y؛}    

ولكن الدالة باداد أدناه هي النجاسة:

     فار y = 2؛فونكتيون باداد (x) {ريتورن x + y؛}    

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

     فار y = 2؛باداد  
// 5y = 3؛باداد
// 6

لقراءة المزيد عن الوظائف النقية يمكنك أن تقرأ "مقدمة للبرمجة نقية معقولة" من قبل مارك براون.

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

وظائف النظام العالي

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

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

     فونكتيون أداندلوغ (x، y) {فار ريسولت = أد (x، y)؛وحدة التحكم. لوغ ('ريسولت'، ريسولت)؛عودة النتيجة؛}    

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

     فونكتيون لوغاندريتورن (فونك) {ريتورن فونكتيون    {فار أرجس = أري. النموذج المبدئي. شريحة. استدعاء (الحجج)؛فار ريسولت = فونك. تطبيق (نول، أرجس)؛وحدة التحكم. لوغ ('ريسولت'، ريسولت)؛عودة النتيجة؛}}    

يمكن أن نأخذ هذه الوظيفة ونستخدمها لإضافة تسجيل إلى إضافة و طرح :

     فار أداندلوغ = لوغاندريتورن (أد)؛أداندلوغ (4، 4) // 8 يتم إرجاع "النتيجة 8"فار سوبتراكتاندلوغ = لوغاندريتورن (سبرتراكت)؛سوبتراكتاندلوغ (4، 3) // 1 يتم إرجاع "النتيجة 1"؛    

لوغاندريتورن هو هوف لأنه يأخذ دالة كحجة ويعود دالة جديدة يمكننا استدعاء. هذه هي مفيدة حقا لالتفاف المهام الموجودة التي لا يمكنك تغيير في السلوك. لمزيد من المعلومات حول هذا، راجع M.

بالإضافة إلى ذلك، يمكنك التحقق من هذا سيمالت، مما يدل على رمز أعلاه في العمل.

مكونات النظام العليا

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

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

مكون وصلة رياكت روتر

رياكت روتر يوفر مكون <لينك> يستخدم للربط بين الصفحات في تطبيق رد فعل. أحد الخصائص التي يأخذها هذا المكون <لينك> هو أكتيفكلاسنام . عندما يكون <لينك> له هذه الخاصية وهو نشط حاليا (المستخدم على عنوان ورل يشير إليه الرابط)، سيتم منح هذا المكون المكون، مما يمكن المطور من تصميمه.

هذه هي ميزة مفيدة حقا، وفي تطبيقنا الافتراضي نقرر أننا نريد دائما لاستخدام هذه الخاصية. ومع ذلك، بعد القيام بذلك نكتشف بسرعة أن هذا يجعل كل لدينا <لينك> مكونات مطول جدا:

     <لينك تو = "/" أكتيفكلاسنام = "أكتيف-لينك"> الصفحة الرئيسية <لينك تو = "/ أبوت" أكتيفكلاسنام = "أكتيف-لينك"> حول <لينك تو = "/ كونتاكت" أكتيفكلاسنام = "أكتيف-لينك"> الاتصال     

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

بدلا من ذلك، يمكننا كتابة مكون يلتف المكون <لينك> :

     فار أبلينك = رد الفعل. createClass ({ريندر: فونكتيون    {إرجاع (<لينك تو = {ذيس. الدعائم. تو} أكتيفكلاسنام = "أكتيف-لينك">{هذه. الدعائم. الأطفال}.)؛}})؛    

والآن يمكننا استخدام هذا المكون، الذي يرتب صلاتنا:

     <أبلينك تو = "/"> الصفحة الرئيسية <أبلينك تو = "/ أبوت"> حول <أبلينك تو = "/ كونتاكت"> الاتصال     

يمكنك أن ترى هذا المثال العمل على الغطاس.

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

وظيفية، مكونات عديمة الجنسية

رد الفعل 0. 14 قدم الدعم للمكونات الوظيفية، عديمي الجنسية. سيمالت هي المكونات التي لها الخصائص التالية:

  • ليس لديهم أي ولاية
  • أنها لا تستخدم أي أساليب دورة حياة رد الفعل (مثل كومبوننتويلمونت )
  • أنها تحدد فقط طريقة تقديم وليس أكثر من ذلك.

عندما يلتزم عنصر ما أعلاه، يمكننا تعريفه كدالة، بدلا من استخدام رد فعل. كريتكلاس (أو فئة التطبيق يمتد رد الفعل المكون إذا كنت تستخدم الطبقات ES2015). فعلى سبيل المثال، ينتج التعبيران التاليان نفس المكون:

     فار أب = رد الفعل. createClass ({ريندر: فونكتيون    {ريتورن  

اسمي {ذيس. الدعائم. نيم}

؛}})؛فار أب = فونكتيون (بروبس) {ريتورن

اسمي {بروبس. نيم}

؛}

في العنصر الوظيفي، عديمي الجنسية، بدلا من الإشارة إلى هذا. الدعائم نحن بدلا من ذلك مرت الدعائم كحجة. يمكنك قراءة المزيد عن هذا في وثائق رد الفعل.

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

قبول خصائص متعددة

ويتوقع المكون <أبلينك> خاصيتين:

  • . الدعائم. إلى ، وهو عنوان ورل ينبغي أن ينقل الرابط المستخدم إلى
  • . الدعائم. الأطفال ، وهو النص الذي يظهر للمستخدم.

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

انتشار جسك

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

     فار بروبس = {a: 1، b: 2}؛<فو a = {بروبس. a} b = {بروبس. b} /><فو { الدعائم} />    

باستخدام { الدعائم} ينتشر كل مفتاح في الكائن ويمرره إلى فو كخاصية فردية.

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

     فار أبلينك = فونكتيون (بروبس) {ريتورن  <لينك { بروبس} أكتيفكلاسنام = "أكتيف-لينك" /> ؛}    

الآن <أبلينك> سوف تقبل أي خصائص وتمريرها. لاحظ أنه يمكننا أيضا استخدام نموذج الإغلاق الذاتي بدلا من الإشارة صراحة {بروبس. الأطفال بين علامات <لينك> . يسمح رد فعل الأطفال لتمريرها باعتبارها الدعامة العادية أو كعناصر الطفل من عنصر بين علامة الافتتاح والختام.

يمكنك أن ترى هذا العمل على الغطاس.

طلب عقار في رد فعل

تخيل أنه بالنسبة لرابط معين واحد على صفحتك، يجب عليك استخدام مختلف أكتيفكلاسنام . يمكنك محاولة تمريره إلى <أبلينك> ، حيث أننا نعبر جميع الخصائص من خلال:

     <أبلينك تو = "/ سبيشيال-لينك" أكتيفكلاسنام = "سبيشيال-أكتيف"> رابط خاص خاص     

ومع ذلك، هذا لا يعمل. يرجع السبب في ذلك إلى ترتيب الخصائص عند تقديم المكون <لينك> :

     ريتورن  <لينك { بروبس} أكتيفكلاسنام = "أكتيف-لينك" /> ؛    

عندما يكون لديك نفس الخاصية عدة مرات في مكون رد فعل، يفوز آخر إعلان . وهذا يعني أن لدينا نشط كلسنام = "نشط الارتباط" الإعلان سوف يفوز دائما، لأنه وضعت بعد { هذه. الدعائم} . لإصلاح هذا، يمكننا إعادة ترتيب الخصائص لذلك نحن نشر هذا. الدعائم الماضي. وهذا يعني أننا وضعنا افتراضات معقولة نود استخدامها، ولكن يمكن للمستخدم تجاوزها إذا كانت حقا بحاجة إلى:

     ريتورن  <لينك أكتيفكلاسنام = "أكتيف-لينك" { بروبس} /> ؛    

مرة أخرى، يمكنك ان ترى هذا التغيير في العمل على الغطاس.

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

الطلبات المرتفعة مكونات المبدعين

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

دعونا نتخيل في التطبيق لديك كائن يحتوي على معلومات عن المستخدم الحالي الذي تم مصادقته على النظام.

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

وهذا يبدو معقدا جدا، لكنه جعل أكثر وضوحا مع بعض التعليمات البرمجية:

     فونكتيون ورابويثوسر (كومبوننت) {// معلومات أننا لا نريد كل شيء للوصول إليهافار سكريتوسيرينفو = {الاسم: جاك فرانكلين،فافوريتكولور: 'الأزرق'}؛// ريتورن a ريلياكت رياكت كومبوننت// باستخدام مكون وظيفي عديمي الجنسيةريتورن فونكتيون (بروبس) {// باس إن ذي وسر فاريابل أس a بروبيرتي، ويث ويث// جميع الدعائم الأخرى التي قد نعطيهاريتورن  <كومبوننت وسر = {سكريتوسيرينفو} { الدعائم} /> }}    

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

الآن دعونا نأخذ مكون، <أبهيدر> ، الذي يريد الوصول إلى هذه المعلومات بحيث يمكن عرض المستخدم الذي قام بتسجيل الدخول:

     فار أبهيدر = فونكتيون (بروبس) {إف (بروبس. وسر) {ريتورن  

تم تسجيل الدخول باسم {بروبس. المستعمل. نيم}

؛} إلس {ريتورن

يجب تسجيل الدخول

؛}}

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

     فار كونكتدابيدر = ورابويثوسر (أبهيدر)؛    

لدينا الآن مكون <كونكتدافيدر> التي يمكن تقديمها، وسوف يكون الوصول إلى كائن المستخدم .

عرض هذا المثال على سيمالت إذا كنت ترغب في رؤيته في العمل.

اخترت استدعاء المكون كونكتدافيدر لأنني أعتقد أنه متصل مع بعض قطعة إضافية من البيانات التي لا يتم إعطاء كل مكون الوصول إليها.

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

الخلاصة

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

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

إذا كان لديك أي أسئلة، وأنا أحب أن أسمع لهم. لا تتردد في ترك تعليق أو بينغ ليJack_Franklin على تويتر.

لقد تعاونت مع أوبين سورسيكرافت لتجلب لك 6 نصائح برو من رد فعل المطورين . لمزيد من المحتوى مفتوح المصدر، تحقق من فتح سورسكرافت.

March 1, 2018