تطوير جافا سكريبت يصبح في بعض الأحيان مثل المباحث. كيف نفهم رمز شخص آخر؟ من الجيد أن يمتلك المطور فنًا دقيقًا لمتغيرات التسمية بحيث يفهم الآخرون هذه النقطة. ولكن ماذا لو كان أعضاء الفريق لا يزالون غير قادرين دائمًا على فهم نية زميلهم؟ كيف نفهم ما يأتي في حجة وظيفة؟
افترض أن الدالة الوسيطة تسمى أخطاء. ربما في الأخطاء هو مجموعة. الخطوط الأرجح؟ حسنا ، هذه المجموعة أمر مفهوم. بعد كل شيء ، يتم التحقق من طوله كذلك. لكن الخاصية طول لديها أيضا سلسلة. يبدو أنه من أجل معرفة ذلك بالضبط ، تحتاج إلى وضع نقطة توقف وتشغيل البرنامج النصي. ثم انتقل بالكامل من خلال البرنامج النصي على واجهة المستخدم (على سبيل المثال ، نحتاج إلى الخطوة الأخيرة من النموذج). الآن في devtools ، يمكن ملاحظة أن الأخطاء هي كائن يحتوي على مجموعة من الحقول المحددة ، بما في ذلك حقل الطول.
هذا الغموض في تحليل كود جافا سكريبت يؤدي إلى تضييع وقت المطور. يمكن أن يكون حلاً جيدًا في هذه الحالة هو typescript (المشار إليه فيما يلي باسم ts). يمكنك استخدامه في المشروع التالي ، أو حتى بشكل أفضل ، تقديم الدعم في المشروع الحالي. بعد ذلك ، سيتم تقليل الوقت لفهم رمز شخص آخر بشكل كبير. في الواقع ، من أجل فهم بنية أي بيانات ، نقرة واحدة كافية. يمكنك التركيز على منطق العمل مع البيانات وفي أي وقت تعرف أنك تفهم الكود بوضوح.
وتجدر الإشارة إلى بعض مزايا ts. يستخدم على نطاق واسع في مختلف الأطر ويرتبط ارتباطًا وثيقًا بجافا سكريبت. يتم تحديد تطوير ts بواسطة احتياجات مطوري الواجهة الأمامية.
تقدم هذه المقالة تطور تطبيقات ما يجب عمله ، ولكن فقط وصف موجز للنقاط المثيرة للاهتمام. يمكن العثور على الرمز الكامل هنا .
اعتدت رد الفعل ، typescript و mobx. Mobx هي أداة مرنة لإدارة حالة التطبيق. Mobx موجزة. يتيح لك العمل مع حالة مكونات التفاعل بأسلوب متزامن. لا مشكلة مثل:
this.setState({name: 'another string'}); alert(this.state.name);
في هذه الحالة ، يتم عرض الحالة القديمة.
بالإضافة إلى ذلك ، mobx مريحة ولا تتداخل مع العمل مع أنواع ts. يمكنك وصف الحالة بفئات منفصلة أو مباشرة داخل مكون التفاعل.
للبساطة ، يتم وضع جميع المكونات في مجلد المكونات. يتم تعريف فئة في مجلد المكون مع وصف للحالة المرتبطة منطقيا بعرض وتشغيل المكون.
يحتوي المجلد TodoItem على ملف به مكون رد الفعل TodoItem.tsx وملف به أنماط TodoItem.module.scss وملف حالة TodoItemState.ts.
يصف TodoItemState.ts حقول تخزين البيانات وكيفية الوصول إليها وقواعد تغييرها. مجموعة الاحتمالات كبيرة للغاية بفضل OOP و ts. يمكن أن يكون جزء من البيانات خاصًا ، وجزءًا للقراءة فقط وما إلى ذلك. باستخدامo decor ، يتم تحديد الحقول القابلة للملاحظة. تتفاعل مكونات التفاعل مع تغييراتها. تُستخدم أدوات الزخرفةa ( الإجراء ) في أساليب لتغيير الحالة.
في TodoItem.tsx ، يتم تمرير خاصيتين فقط إلى الدعائم. في mobx ، يكون الأداء الأمثل للتطبيق هو نقل هياكل البيانات المعقدة إلى مكون تفاعل الدعائم. بما أننا نستخدم ts ، يمكننا الإشارة بدقة إلى نوع الكائن الذي يقبله المكون.
تصف واجهة ITodoItemProps خاصية ما يجب عمله للنوع TodoItemState. وبالتالي ، داخل عنصر التفاعل ، يتم تزويدنا ببيانات للعرض وطرق تغييرها. علاوة على ذلك ، يمكن وصف القيود على تغيير البيانات في فئة الحالة وفي أساليب مكون التفاعل ، حسب المهام.
يشبه مكون TodoList TodoItem. في TodoListState.ts ، يمكنك رؤية الحروف باستخدام مصمم الديكورc (computed). هذه عبارة عن مجموعات عادية ، يتم فقط حفظ قيمها وإعادة فرزها عندما تتغير تبعياتها. حساب حسب التصميم يشبه محددات الإرجاع. مريح ، ليس من الضروري ، مثل React.memo أو إعادة تحديد ، لتمرير قائمة التبعيات بشكل صريح. تستجيب مكونات التفاعل إلى التغييرات المحسوبة بالإضافة إلى التغييرات الملحوظة. ميزة مثيرة للاهتمام هي أن إعادة حساب القيمة لا تحدث إذا لم يتم حسابها حاليًا في التقديم (مما يوفر الموارد). لذلك ، على الرغم من الحفاظ على قيم التبعية الثابتة ، يمكن إعادة حسابها (هناك طريقة لإخبار mobx صراحة بحفظ القيمة المحسوبة).
لا يمكن الوصول إلى قائمة المهام إلا من خلال حقل محسوب ، حيث يتم ، حسب وضع العرض ، إرجاع مجموعة البيانات التي تمت تصفيتها (مكتملة أو نشطة أو غير مطلوبة بالكامل). تحدد التبعيات التي يجب القيام بها تحديد حقول Todos المحسوبة و activeTodos وحقول _todos التي يمكن ملاحظتها.
النظر في المكون الرئيسي للتطبيق. يعرض نموذجًا لإضافة مهمة جديدة وقائمة مهام. يتم إنشاء مثيل لحالة AppSate الرئيسية على الفور.
يحتوي حقل appState على مثيل لفئة TodoListState لعرض مكون TodoList وطريقة إضافة مهام جديدة ، والتي يتم تمريرها إلى مكون AddTodo.
المكون AddTodo لديه حالة معزولة. لا يوجد الوصول إليها من الحالة العامة. الاتصال الوحيد إلى appState هو من خلال طريقة appState.addTodo عند إرسال نموذج.
بالنسبة لحالة مكون AddTodo ، يتم استخدام مكتبة formstate ، والتي هي أصدقاء رائعون مع ts و mobx. Formstate يسمح لك بالعمل بشكل مريح مع النماذج ، والتحقق من صحة النماذج ، وأكثر من ذلك. يحتوي النموذج على اسم حقل واحد مطلوب فقط.
بشكل عام ، لا معنى لوصف سلوك جميع المكونات بالكامل. ويرد رمز كامل هنا .
توضح هذه المقالة محاولة المؤلف كتابة رمز بسيط ومرن ومنظم يسهل الحفاظ عليه. React يقسم واجهة المستخدم إلى مكونات. تصف المكونات فئات الحالة (يمكن اختبار كل فصل على حدة). يتم إنشاء مثيلات الحالات إما في المكون نفسه أو على مستوى أعلى ، اعتمادًا على المهام. بشكل ملائم بما فيه الكفاية ، يمكنك تحديد أنواع حقول الفصل وأنواع خصائص المكون بفضل الطباع. بفضل mobx ، يمكننا ، بشكل غير محسوس تقريبًا للمطور ، جعل مكونات التفاعل تتفاعل مع تغييرات البيانات.