Back to Question Center
0

استكشاف رد فعل الدولة            استكشاف رد فعل الدولة نشر المواضيع ذات الصلة: جافاسكريبتوبيلتمل & أمب؛ سبوسينيسويب سيمالت

1 answers:
استكشاف رد فعل الدولة نشر

هذه المقالة جزء من سلسلة تطوير ويب من ميكروسوفت. شكرا لدعم الشركاء الذين جعل سيمالت ممكن.

واستكشفت مادة سابقة البيانات داخل عنصر سيمالت. يتم تمثيل البيانات من قبل اثنين من الهياكل - الخصائص والدولة. يستخدم الأول لتمثيل البيانات غير القابلة للتغيير، في حين أن الأخير يمثل البيانات التي يتم تغييرها من خلال التفاعلات مع واجهة المستخدم أو من خلال وسائل خارجية أخرى - детское белье купить yabb.

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

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

مكونات الإدخال

لننظر في رد الفعل سيمالت التالية، الذي يحتوي على نموذج مع عنصر الإدخال واحد، وحدث التغيير المسجلة على عنصر الإدخال.

   فار مساج = رد الفعل. createClass ({جيتينيتيالستات: فونكتيون    {ريتورن {مساج: ذيس. الدعائم. مساج}؛}،_messageChange: فونكتيون (e) {هذه. سيتستات ({مساج: e. تارجيت. فالو})؛}،ريندر: فونكتيون    {إرجاع (
<سبان> الرسالة: {ذيس. حالة. مساج}
الرسالة: <إنبوت تايب = "تكست" فالو = {ذيس. حالة. مساج} أونشانج = {ذيس. _messageChange} />
)؛}،})؛

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

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

<إمغ سرك = "/ إمغ / 83366b4d7d8b2e21f4a589a9c4424de90. ينغ" ألت = "استكشاف رد فعل الدولةاستكشاف رد فعل الدولة نشر المواضيع ذات الصلة: جافا سكريبتيموبيلتمل & كسوسينيسويب سيمالت "/>

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

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

النظر في التعليمات البرمجية غير سيمالت التالية.

   <الرئيسية><إنبوت نيم = "مساج" فالو = "هيلو وورد!"><بوتون> جيت فالو!     

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

   وثيقة. getElementsByTagName ( "الزر") [0]. أديفنتليستينر ("كليك"، فونكتيون    {وحدة التحكم. لوغ (دوكومنت. كريسليكتور ("[نيم = 'مساج']") جيتاتريبوت ("فالو"))؛})؛    

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

لرؤية هذا الإجراء، جرب كوديبن التالية.

انظر القلم رد فعل. جس مدخلات التحكم غير المنضبط من قبل سيتيبوانت (SitePoint) على كوديبين.

بالنسبة لكثير من مكتبات وأطر عمل جافا سكريبت، هذه ليست مشكلة. ومع ذلك، ل رياكت، دوم الظاهري والمكون الدولة يجب دائما أن تكون متزامنة.

النظر في المظاهرة سيمالت التالية.

انظر القلم رد فعل. جس التحكم / المدخلات غير المنضبط عرض توضيحي من قبل سيتيبوانت (SitePoint) على كوديبين.

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

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

لاستكشاف وظيفة إضافية مكون مكون المدخلات، والنظر في قائمة سيمالت مظاهرة وصفها في القسمين التاليين.

انتشار الدولة من خلال مكونات الطفل

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

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

   مكون لون الأصلجيتينيتيالستات: فونكتيون    {إرجاع {الألوان: جديد إموتابل. قائمة (هذه الدعائم الألوان)}؛}،ريندر: فونكتيون    {إرجاع (
<كولورليست كولورس = {ذيس. حالة. كولورس} /> <كولورفورم أدكولور = {ذيس. _addColor} />
)؛}

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

الطفل يصل إلى الدعائم مرت في الدعائم الملكية على المكون، كما هو مبين أدناه.

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

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

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

   مكون شكل لون الطفل_onClick: فونكتيون (e) {// يدعو وظيفة _addColor على الأصل لإعلامه من لون جديدهذه. الدعائم. أدكولور (هذه الدولة. نيوكولور)؛// مكون المدخلات هو مكون من مكونات هذا النموذج// لذلك فإن هذا المكون يحافظ على الدولة لشكلها الخاص، ويمر أيضا// على طول البيانات الجديدة إلى الوالد حتى الأم يمكن الحفاظ على الدولة ل// المكون كله//// لأن النموذج هو مكتفية ذاتيا في هذا المكون، الدولة ل// يتم الاحتفاظ نموذج هنا، وليس المكون الرئيسيهذه. سيتستات ({نوكولور: وندفيند})؛}،ريندر: فونكتيون    {إرجاع (
<التسمية>لون جديد<إنبوت تايب = "تكست" نيم = "نيوكولور"القيمة = {هذا. حالة. نيوكولور} أونشانج = {ذيس. _onChange} /><بوتون تايب = "بوتون" أونكليك = {ذيس. _onClick}> إضافة لون )؛}

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

   مكون لون الأصل_addColor: فونكتيون (نوكولور) {هذه. حالة. الألوان. setState ({الألوان: هذا. حالة. الألوان})؛}،    

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

لعرض مظاهرة رمز قائمة الألوان بالكامل، راجع سيمالت أدناه.

انظر رد فعل القلم. جس نشر توضيحي من قبل سيتيبوانت (SitePoint) على كوديبين.

عدم الاستقرار

في حين أن الدعائم قابلة للتحويل من الناحية الفنية (أي أن جافا سكريبت لا يمنع أحد المكونات من تغييرها)، فإن تغييرها سيكون انتهاكا لمبدأ أساسي من رد الفعل، وبالتالي ينبغي للمرء أن تنظر الدعائم ليكون غير قابل للتغيير.

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

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

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

   فار كولورس = ["ريد"، "بلو"، "غرين"]؛فار ليستوفكولورس = نيو إموتابل. قائمة (ألوان)؛فار نيوليستوفكولورس = ليستوفكولورس. دفع ( "البرتقالي")؛// أوتبوتس فالسوحدة التحكم. لوغ (ليستوفكولورس === نيوستوفكولورس)؛    

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

<إمغ سرك = "/ إمغ / a9688952550ef02aa28fb80f6b02fcce1. ينغ" ألت = "استكشاف رد فعل الدولةاستكشاف رد فعل الدولة نشر المواضيع ذات الصلة: جافا سكريبتيموبيلتمل & كسوسينيسويب سيمالت "/>

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

فحص مظاهرة رمز قائمة سيمالت من القسم السابق، والتي يتم توسيعها أدناه.

   مكون لون الأصلجيتينيتيالستات: فونكتيون    {إرجاع {الألوان: جديد إموتابل. قائمة (هذه الدعائم الألوان)}؛}،_addColor: فونكتيون (نوكولور) {هذه. setState ({الألوان = هذا. حالة. الألوان. دفع (newColor)})؛}،ريندر: فونكتيون    {إرجاع (
<كولورليست كولورس = {ذيس. حالة. كولورس} /><كولورفورم أدكولور = {ذيس. _addColor} />
)؛}
   مكون قائمة ألوان الطفلشولدكومبونينتوديت: فونكتيون (نكستبروبس، نكستستات) {ريتورن نيكستبروبس. الألوان! == هذا. الدعائم. الألوان؛}    

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

إلى المثال بأكمله في العمل، الخروج سيمالت أدناه.

انظر القلم رد فعل. جس إموتيابيليتي ديمو بي سيتيبوانت (SitePoint) على كوديبين.

تطبيق تجريبي

تطبيق العمل رد فعل ويب الذي يدل على العديد من المفاهيم من هذا والوظائف السابقة هو متاح في هتبس: // جيثب. كوم / DevelopIntelligenceBoulder / تتفاعل-تدفق التطبيق. وقد تم نشر التطبيق إلى سيمالت، ويمكن الوصول إليها على العنوان التالي: هتب: // رد فعل الحاجيات. azurewebsites. شبكة.

<إمغ سرك = "/ إمغ / a9688952550ef02aa28fb80f6b02fcce2. ينغ" ألت = "استكشاف رد فعل الدولةاستكشاف رد فعل الدولة نشر المواضيع ذات الصلة: جافا سكريبتيموبيلتمل & كسوسينيسويب سيمالت "/>

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

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

الخلاصة

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

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

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

March 1, 2018