كاستمرار
للمقال السابق حول الحالة العامة للمكونات ، سوف أقوم بتطوير الموضوع وأريد تطبيق ميزة من شأنها التقاط ومعالجة حدث تغيير الحالة في كل مكون (عندما تتغير البيانات في حالة عامة في بعض المكونات).
رابط للمشروععادةً ، من أجل تتبع تغييرات البيانات في أحد المكونات ، يتم إنشاء اتصال مباشر ، وهذا يعني إما أننا نقوم بفحص طريقة التحديث ما إذا كانت البيانات قد تغيرت هناك
التحقق من صحة البيانات الأولية من خلال طريقة التحديثأو نشترك في حدث محدد للغاية ، يتم تشغيله بشكل مستقل في المكون "المتعقب" ، وتتم معالجته في النهاية.
الاشتراك في حدث في مكون ومعالجتههناك العديد من أوجه القصور في هذا النهج ، والتي يتم وصفها في الغالب في مقال سابق. السبب الرئيسي المشترك لهذه العيوب هو الاتساق القوي والصيانة المعقدة (القدرة على دعم وتطوير المشروع و refactor).
إنشاء حل إعلام الدولة
الآن بعد أن أصبح لديك نظام يسمح لك بفك الارتباط بين المكونات ووسائل إنشاء المراسلات بين المكونات ، يمكنك التخلص من التحقق اليدوي للقيم في الحالة العامة ، كما يلي:
الوضع العام لتغيير نظام الإخطارفي التطبيق الموضح في المقالة السابقة ، يتم تغيير البيانات في مكان واحد ، في مفهرس مكون SharedState ، وبالتالي يكون من السهل جدًا التحكم في تغييرها
مفهرس في حالة عامةفي واضع المفهرس ، نقوم بتعيين قيم الحالة.
الآن ، بالنسبة لمكون
SharedState ، تحتاج إلى إضافة تبعية على
SharedEvents ، حيث أنني
سأستخدمها لإرسال الإشعارات. إضافة سمة لـ
SharedState.
إضافة تبعية SharedState من SharedEventsوإنشاء فئة يرث من EventData لإرسال البيانات في إشعار الحالة. وسوف تحتوي على اسم المعلمة ، في الدولة وقيمتها الجديدة
إضافة فئة تحتوي على معلومات حول تغيير في الحالة العامةتحتاج الآن إلى إضافة رابط إلى
SharedEvents ، والحصول عليها من كائن اللعبة في مكون
SharedState
الحصول على SharedEvents في مكون SharedStateالآن سنقوم بتغيير واضع المفهرس بحيث يتم تغيير إشعار في كل مرة تتغير فيها الحالة ، ويتم إنشاء إشعار يحمل اسم "Sharedstatechanged" ونقوم بتمرير كائن يحتوي على جميع البيانات المتعلقة بالتغيير
تغيير واضع المفهرسيبقى الآن الاشتراك في التغييرات في أحد المكونات وتغيير البيانات في عنصر آخر والتحقق من كيفية عملها.
دعنا نقول حالة التغييرات
SecondComponent ، على سبيل المثال ، المعلمة "
somedata" ، ومكون
FirstComponent يراقب تغيير الحالة عن طريق الاشتراك في الإخطارات
في
SecondComponent ، نسمي تغيير المعلمة
تغيير اتصال البياناتوالآن في الأسلوب
FirstComponent نضيف
معالجًا وطباعة المعلومات حول التغيير في الحالة العامة إلى وحدة التحكم
الحالة العامة تغيير معالجة الحدثالآن ، إذا بدأت اللعبة ، بعد تغيير الحالة العامة في
SecondComponent ، في مكون
FirstComponent ، سوف نتلقى إشعارًا
ونخرج البيانات إلى وحدة التحكم

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

مهم!
في التطبيق السابق ، كان هناك خطأ في فئة
SharedEvents ، ولإصلاحه تحتاج إلى تغيير طريقة
الاشتراك إلى:
