رد الفعل هو شيء عظيم. عند استخدامها بشكل صحيح ، تكون بنية التطبيق فعالة وبنية المشروع سهلة القراءة. ولكن كما هو الحال في أي قرار ، هناك بعض الخصائص.
وصف الإجراءات ومخفضات هي واحدة من هذه الميزات. يعد التنفيذ الكلاسيكي لهذين الكيانين في التعليمات البرمجية مهمة تستغرق وقتًا طويلاً.
آلام التنفيذ الكلاسيكي
مثال بسيط:
الإخراج يحتوي على 3 ملفات والمشاكل التالية على الأقل:
- "سخام" الكود ببساطة عن طريق إضافة سلسلة جديدة من الإجراءات
- الاستيراد الزائد من ثوابت العمل
- أسماء القراءة المستمرة للعمل (بشكل فردي)
التحسين
يمكن تحسين هذا المثال من خلال
إجراءات التكرار .
import { createActions, handleActions, combineActions } from 'redux-actions' export const actions = createActions({ popups: { open: { start: () => ({ loading: true }), pending: () => ({ loading: true }), fail: (error) => ({ loading: false, error }), success: (name, data) => ({ loading: false, name, data }), }, close: { start: () => ({ loading: true }), pending: () => ({ loading: true }), fail: (error) => ({ loading: false, error }), success: (name) => ({ loading: false, name }), }, }, }).popups const initialState = { opened: [] }; export const accountsReducer = handleActions({ [ combineActions( actions.open.start, actions.open.pending, actions.open.success, actions.open.fail, actions.close.start, actions.close.pending, actions.close.success, actions.close.fail ) ]: (state, { payload: { loading } }) => ({ ...state, loading }), [combineActions(actions.open.fail, actions.close.fail)]: (state, { payload: { error } }) => ({ ...state, error }), [actions.open.success]: (state, { payload: { name, data } }) => ({ ...state, error: null, opened: [ ...(state.opened || []).filter(x => x.name !== name), { name, data } ] }), [actions.close.success]: (state, { payload: { name } }) => ({ ...state, error: null, opened: [ ...state.opened.filter(x => x.name !== name) ] }) }, initialState)
بالفعل أفضل بكثير ، ولكن لا يوجد حد الكمال.
علاج الألم
بحثًا عن حل أفضل ، صادفت تعليقًا لـ
LestaD habr.com/en/post/350850/#comment_10706454 وقررت تجربة
redux-symbiote .
سمح هذا لإزالة الكيانات غير الضرورية وتقليل مقدار التعليمات البرمجية.
المثال أعلاه بدأ يبدو كالتالي:
من الايجابيات لدينا:- الكل في ملف واحد
- رمز أقل
- تمثيل منظم للإجراءات
من السلبيات:- لا تقدم IDE دائمًا تلميحات
- من الصعب البحث عن عمل في الكود
- من الصعب إعادة تسمية العمل
على الرغم من السلبيات ، يتم استخدام هذه الوحدة بنجاح في مشاريعنا.
بفضل
LestaD للعمل الجيد.