SharedState مكون تغيير حالة الإعلام

كاستمرار للمقال السابق حول الحالة العامة للمكونات ، سوف أقوم بتطوير الموضوع وأريد تطبيق ميزة من شأنها التقاط ومعالجة حدث تغيير الحالة في كل مكون (عندما تتغير البيانات في حالة عامة في بعض المكونات).

رابط للمشروع

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


التحقق من صحة البيانات الأولية من خلال طريقة التحديث

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


الاشتراك في حدث في مكون ومعالجته

هناك العديد من أوجه القصور في هذا النهج ، والتي يتم وصفها في الغالب في مقال سابق. السبب الرئيسي المشترك لهذه العيوب هو الاتساق القوي والصيانة المعقدة (القدرة على دعم وتطوير المشروع و 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 ، ولإصلاحه تحتاج إلى تغيير طريقة الاشتراك إلى:

Source: https://habr.com/ru/post/ar438628/


All Articles