Back to Question Center
0

كيفية بناء التطبيق تودو باستخدام رد فعل، ريدوكس، و Immutable.js            كيفية بناء التطبيق تودو باستخدام رد فعل، ريدوكس، و Immutable.jsRelated المواضيع: أبيسولس & أمب؛ Semalt

1 answers:
كيفية بناء تودو التطبيق باستخدام رد فعل، ريدوكس، وغير قابل للتغيير. جس

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

طريقة التفاعل يستخدم مكونات وتدفق البيانات في اتجاه واحد يجعلها مثالية لوصف بنية واجهات المستخدم. ومع ذلك، يتم الاحتفاظ أدواتها للعمل مع الدولة بسيطة عمدا - للمساعدة تذكرنا أن رد هو مجرد عرض في العمارة سيمالت التقليدية - собачьи аксессуары.

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

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

ريدوكس

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

  1. يتم الاحتفاظ دولتنا في متجر واحد
  2. تغييرا من إجراء وليس طفرة

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

لدينا سيمالت المكونات ستكون مسؤولة عن إرسال الإجراءات إلى متجرنا، و بدوره متجر سوف اقول المكونات عندما تحتاج إلى إعادة تقديم.

إموتابلجس

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

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

ديمو

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

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

التعليمات البرمجية متاحة في مستودع على جيثب.

الإعداد

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

   نبم تثبيت - حفظ رد فعل رد فعل دوم رد الفعل رد الفعل ريدوكس غير قابل للتغييرنبم إنستال --save-ديف ويباك بابيل كور بابيل محمل بابيل-بريسيت-es2015 بابيل-بريسيت-رياكت    

سنقوم باستخدام جسك و ES2015، لذلك سنقوم بتجميع التعليمات البرمجية لدينا مع بابيل، ونحن في طريقنا للقيام بذلك كجزء من عملية تجميع وحدة مع ويباك.

أولا، سنقوم بإنشاء تكوين ويباك في ويباك. التكوين. جس :

     وحدة نمطية. الصادرات = {دخول: '. / SRC / التطبيق. شبيبة،انتاج: {المسار: __dirname،فلنام: 'الحزمة. شبيبة "}،وحدة: {لوادر: [{اختبار: /\. شبيبة $ /،استبعاد: / node_modules /،محمل: 'بابل-لويدر'،كيري: {بريسيتس: ['es2015'، 'رياكت']}}]}}؛    

وأخيرا، سنقوم بتمديد حزمة. جسون عن طريق إضافة النصي نيم لتجميع التعليمات البرمجية لدينا مع خرائط المصدر:

     "سكريبت": {"بيلد": "ويباك --debug"}    

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

     كونست داميتودوس = [{إد: 0، إسدون: ترو، تكست: 'ميك كومبونينتس'}،{إد: 1، إسدون: فالس، تكست: 'ديسين أكتيونس'}،{إد: 2، إسدون: فالس، تكست: 'إمبليمنت ريدوسر'}،{إد: 3، إسدون: فالس، تكست: 'كونيكت كومبونينتس'}].    

لهذا التطبيق، ونحن سوف تحتاج فقط اثنين من مكونات رد الفعل، <تودو /> و <تودوليست /> .

     // سرك / كومبونينتس. شبيبةاستيراد رد فعل من 'رد'؛تصدير وظيفة تودو (الدعائم) {كونست {تودو} = بروبس؛إف (تودو. إزدون) {ريتورن <ستريك> {تودو. النص} .} إلس {ريتورن <سبان> {تودو. النص 1) ؛}}تصدير وظيفة تودوليست (الدعائم) {كونست {تودوس} = بروبس؛إرجاع ( <ديف كلاسنام = 'تودو'> <إنبوت تايب = 'تكست' بلاسهولدر = 'إضافة تودو' /> <أول كلاسنام = 'todo__list'> {لجميع الناس. ماب (t => (<لي كي = {t. إد} كلاسنام = 'todo__item'><تودو تودو = {t} />  ))}   
)؛}

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

   <رئيس><لينك ريل = "ستيلشيت" هريف = "ستايل. كس"><تيتل> تودو إموتابل <ديف إد = "أب">  
<سكريبت سرك = "باندل. جس">

سنحتاج أيضا إلى نقطة دخول التطبيق على سرك / التطبيق. جس .

     // سرك / أب. شبيبةاستيراد رد فعل من 'رد'؛استيراد {ريندر} من 'رياكت-دوم'؛استيراد {تودوليست} من '. / المكونات '؛كونست داميتودوس = [{إد: 0، إسدون: ترو، تكست: 'ميك كومبونينتس'}،{إد: 1، إسدون: فالس، تكست: 'ديسين أكتيونس'}،{إد: 2، إسدون: فالس، تكست: 'إمبليمنت ريدوسر'}،{إد: 3، إسدون: فالس، تكست: 'كونيكت كومبونينتس'}].يجعل( <تودوليست تودوس = {داميتودوس} /> ،وثيقة. getElementById ( 'التطبيق'))؛    

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

ريدوكس و إموتابل

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

     استيراد {قائمة، خريطة} من 'غير قابل للتغيير'؛كونست داميتودوس = قائمة ([الخريطة ({إد: 0، إسدون: ترو، تكست: 'ميك كومبونينتس'})،الخريطة ({إد: 1، إسدون: فالس، تكست: 'ديسين أكتيونس'})،الخريطة ({إد: 2، إسدون: فالس، تكست: 'إمبليمنت ريدوسر'})،الخريطة ({إد: 3، إسدون: فالس، تكست: 'كونيكت كومبونينتس'})])؛    

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

إجراءات التصميم

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

سيمالت تحديد بعض الوظائف لإنشاء هذه الإجراءات:

     // سرك / أكتيونس. شبيبة// هاك موجزة لتوليد إدس فريدة من نوعها يمكن تمريرهاكونست إيد =    => الرياضيات. عشوائية   . toString   . شريحة  
؛إكسبورت فونكتيون أدتودو (تكست) {إرجاع {تايب: 'ADD_TODO'،بايلعد: {إد: إيد ،إسدون: فالس،النص: نص}}؛}إكسبورت فونكتيون توغليتودو (إد) {إرجاع {تايب: 'TOGGLE_TODO'،بايلعد: إد}}

كل عمل هو مجرد كائن سيمالت مع نوع وحمولة الخصائص.

تصميم المخفض

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

سيمالت الهيكل الأولي لدينا المخفض:

     // سرك / ريدوسر. شبيبةاستيراد {قائمة، خريطة} من 'غير قابل للتغيير'؛كونست إينيت = ليست ([])؛دالة التصدير الافتراضي (تودوس = إينيت، أكتيون) {سويتش (أكتيون. تايب) {القضية 'ADD_TODO':// .الحالة "TOGGLE_TODO":// .الافتراضي:عودة العودة؛}}    

التعامل مع ADD_TODO عمل بسيط جدا، كما يمكننا استخدام. دفع ، الذي سيعود قائمة جديدة مع تودو إلحاق في نهاية:

     حالة 'ADD_TODO':عودة العودة. بوش (ماب (أكتيون. بايلعد))؛    

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

الإجراء الأكثر تعقيدا الذي نحتاج إلى التعامل معه هو TOGGLE_TODO :

     الحالة "TOGGLE_TODO":عودة العودة. ماب (t => {إف (t. جيت ('إد') === أكتيون. بايلعد) {عودة t. أوبديت ('إسدون'، إسدون =>! إسدون)؛} إلس {عودة t؛}})؛    

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

قد يساعد على رؤية النسخة الحرفية:

     كونست تودو = ماب ({إد: 0، تكست: 'فو'، إسدون: فالس})؛لكى يفعل. أوبديت ('إسدون'، إسدون =>! إسدون)؛// => {إد: 0، تكست: 'فو'، إسدون: ترو}    

ربط كل شيء

الآن لدينا أعمالنا و المخفض جاهزة، يمكننا إنشاء مخزن و توصيله إلى مكونات سيمالت لدينا:

     // سرك / أب. شبيبةاستيراد رد فعل من 'رد'؛استيراد {ريندر} من 'رياكت-دوم'؛استيراد {كريتستور} من 'ردوكس'؛استيراد {تودوليست} من '. / المكونات '؛استيراد المخفض من '. / المخفض؛كونست ستور = كريتستور (المخفض)؛يجعل(<تودوليست تودوس = {ستور. جيتستات   } />،وثيقة. getElementById ( 'التطبيق'))؛    

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

سنحتاج إلى حاوية حول <تودوليست /> المكون. دعونا نرى ما يبدو مثل:

     // سرك / كونتينرز. شبيبةاستيراد {الاتصال} من 'رد الفعل ردوكس'؛استيراد * كمكونات من '. / المكونات '؛إيمبورت {أدتودو، توغليتودو} فروم '. /أفعال'؛تصدير كونست تودوليست = الاتصال (فونكتيون مابستاتيتوبروبس (ستات) {// .}،فونكتيون مابديسباتشوبروبس (ديسباتش) {// .}) (كومبونينتس. تودوليست)؛    

نخلق الحاويات مع وظيفة الاتصال. عندما ندعو ربط ، ونحن تمرير وظيفتين، مابستاتيتوبروبس و مابديسباتشتوبروبس . استهداف؛كونست تكست = إنبوت. القيمة؛كونست إسنتيركي = (الحدث. الذي == 13)؛كونست إيسلونجنوغ = نص. لينغث> 0؛إف (إسنتيركي && إسلونغنوغ) {إدخال. فالو = ''؛addTodo (النص)؛}}؛كونست توغليكليك = إد => إيفنت => توغليتودو (إد)؛إرجاع ( <ديف كلاسنام = 'تودو'> <إنبوت تايب = 'تكست'اسم_الفئة = 'todo__entry "بلاسهولدر = 'إضافة تودو'أونكيدون = {أونسوبميت} /> <أول كلاسنام = 'todo__list'> {لجميع الناس. ماب (t => ( <لي كي = {t. الحصول على ( 'الهوية')}اسم_الفئة = 'todo__item "أونكليك = {توغليك (t. جيت ('إد'))}> <تودو تودو = {t. توجس } /> ))}

)؛}

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

وأخيرا، نحن بحاجة لجعل الحاويات على بينة من المخزن، وذلك باستخدام <موفر /> مكون:

     // سرك / أب. شبيبةاستيراد رد فعل من 'رد'؛استيراد {ريندر} من 'رياكت-دوم'؛استيراد {كريتستور} من 'ردوكس'؛إيمبورت {بروفيدر} فروم 'رياكت ريدوكس'؛استيراد المخفض من '. / المخفض؛استيراد {تودوليست} من '. / الحاويات؛// ^^^^^^^^^^كونست ستور = كريتستور (المخفض)؛يجعل( <مخزن المزود = {ستور}>  <تودوليست />   ،وثيقة. getElementById ( 'التطبيق'))؛    

المقررات الموصى بها

الخلاصة

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

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

<إمغ سرك = "/ إمغ / 6e2f5873a638b37c9799012358afddbe1. جبغ" ألت = "كيفية بناء التطبيق تودو باستخدام رد فعل، ريدوكس، وغير قابل للتغيير. شبيبةكيفية بناء التطبيق تودو باستخدام رد فعل، ريدوكس، وغير قابل للتغيير. المواضيع الموزعة: أبيستولس & سيمالت "/>
أفضل طريقة لتعلم رد فعل للمبتدئين
ويس بوس
دورة تدريبية خطوة بخطوة لتحصل على بناء العالم الحقيقي رد فعل. جس + فيريباس تطبيقات ومكونات الموقع في بضع بعد الظهر. قم باستخدام كوبون الخصم 'سيتيبوانت' عند الخروج للحصول على خصم 25٪ .

March 1, 2018