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


const originalState = { user: { name: 'John Doe'، جهة الاتصال: { البريد الإلكتروني: 'johndoe@example.com'، الهاتف: '123 - 456 - 7890' } } }; function userReducer(state = originalState, action) { Switch (action.type) { case 'UPDATE_EMAIL': // سنتعرف على كيفية تحديث البريد الإلكتروني هنا return State; الافتراضي: حالة الإرجاع؛ } }
تحديث الحالة المتداخلة - نسخة سطحية
إحدى طرق تحديث الحالة المتداخلة هي إنشاء نسخة سطحية من كائن الحالة. يمكنك استخدام عامل الانتشار في JavaScript لتحقيق ذلك. لنقم بتحديث البريد الإلكتروني في المثال أعلاه:
وظيفة userReducer(state = originalState, action) { Switch (action.type) { case 'UPDATE_EMAIL': return { ...state, user: { ...state.user, contact: { ...state.user.contact, email: action.payload } } }; الافتراضي: حالة الإرجاع؛ } }
في هذا الكود، نقوم بإنشاء كائن حالة جديد. أولاً، قمنا بنشر كائن الحالة الموجود. ثم نقوم بنشر كائن المستخدم داخل الحالة الجديدة. أخيرًا، قمنا بنشر كائن جهة الاتصال وتحديث خاصية البريد الإلكتروني بالقيمة الجديدة من حمولة الإجراء.
استخدام المكتبات لتسهيل التحديثات
إذا كانت ولايتك لديها تداخل عميق جدًا أو إذا وجدت أن أسلوب عامل الانتشار مرهق للغاية، فيمكنك استخدام مكتبات مثل immer. يسمح لك Immer بكتابة تعليمات برمجية تبدو وكأنها تحوّر الحالة، ولكن تحت الغطاء، فإنها تنشئ نسخة غير قابلة للتغيير.
إليك كيفية استخدام Immer لتحديث نفس الحالة المتداخلة:
استيراد المنتجات من "مير"؛ const originalState = { user: { name: 'John Doe'، جهة الاتصال: { البريد الإلكتروني: 'johndoe@example.com'، الهاتف: '123 - 456 - 7890' } } }; function userReducer(state = originalState, action) { return production(state, Draft => { Switch (action.type) { case 'UPDATE_EMAIL': Draft.user.contact.email = action.payload;break; default: // Do Nothing } }); }
مع Immer، تبدو التعليمات البرمجية أكثر وضوحًا وأكثر سهولة. أنت تكتب التعليمات البرمجية بشكل أساسي كما لو كنت تقوم بتحويل الحالة، لكن Immer يعتني بإنشاء نسخة غير قابلة للتغيير من الحالة لك.
التطبيقات الحقيقية - العالمية في إمدادات المخفض
كمورد للمخفضات، فإننا نتعامل مع أنواع مختلفة من المخفضات مثلعلبة التروس الكوكبية نيما 23,الزاوية اليمنى المخفض الكوكبي، وعلبة تروس تخفيض نيما 34. في البرنامج الذي يتحكم في هذه المخفضات، تعد الإدارة المناسبة للحالة أمرًا ضروريًا.
على سبيل المثال، في نظام التحكم الخاص بعلبة التروس الكوكبية Nema 23، قد تحتوي الحالة على معلومات حول السرعة الحالية لعلبة التروس وعزم الدوران ودرجة الحرارة. إذا كنت بحاجة إلى تحديث قراءة درجة الحرارة في الولاية، فستتبع نفس مبادئ الثبات وتحديثات الحالة المتداخلة.
التعامل مع المصفوفات في الحالة المتداخلة
يمكن أيضًا أن يكون تحديث المصفوفات في الحالة المتداخلة أمرًا صعبًا بعض الشيء. لنفترض أن لديك حالة بها مجموعة من المستخدمين، ولكل مستخدم كائن متداخل لمعلومات الاتصال:
const originalState = { المستخدمين: [ { المعرف: 1، الاسم: 'John Doe'، جهة الاتصال: { البريد الإلكتروني: 'johndoe@example.com'، الهاتف: '123 - 456 - 7890' } }، { المعرف: 2، الاسم: 'Jane Smith'، جهة الاتصال: { البريد الإلكتروني: 'janesmith@example.com'، الهاتف: '098 - 765 - 4321' } } ] }; وظيفة userListReducer(state = originalState, action) { Switch (action.type) { case 'UPDATE_USER_EMAIL': return { ...state, users:state.users.map(user => { if (user.id === action.payload.userId) { return { ...user, contact: { ...user.contact, email: action.payload.newEmail } }; } return user; }) }; الافتراضي: حالة الإرجاع؛ } }
في هذا المثال، نستخدم وظيفة الخريطة للتكرار على مصفوفة المستخدمين. إذا كان معرف المستخدم يتطابق مع معرف المستخدم في حمولة الإجراء، فإننا نقوم بإنشاء كائن مستخدم جديد باستخدام البريد الإلكتروني المحدث. وإلا فإننا نعيد كائن المستخدم الأصلي.
خاتمة
يمكن أن يمثل تحديث الحالة المتداخلة في المخفض تحديًا كبيرًا، ولكن باستخدام التقنيات الصحيحة، يصبح الأمر قابلاً للإدارة. سواء كنت تستخدم عامل الانتشار للنسخ السطحية أو مكتبة مثل Immer، فإن المفتاح هو الحفاظ على الثبات.
باعتبارنا موردًا للمخفضات، فإننا ندرك أهمية إدارة الحالة المناسبة في البرنامج الذي يتحكم في المخفضات لدينا. إذا كنت في السوق للحصول على مخفضات عالية الجودة مثلعلبة التروس الكوكبية نيما 23,الزاوية اليمنى المخفض الكوكبي، أوعلبة تروس تخفيض نيما 34، وإذا كانت لديك أية أسئلة أو تريد مناقشة متطلباتك المحددة، فلا تتردد في التواصل معنا. نحن هنا لمساعدتك في العثور على حل المخفض المثالي لاحتياجاتك.
مراجع
- رد فعل الوثائق الرسمية على إدارة الدولة
- توثيق المكتبة دائما






