مرحبا يا هبر! أقدم إليكم ترجمة المقال "إنشاء متجر عالمي يشبه الإعادة باستخدام React Hooks" بواسطة Ramsay.
دعونا نتخيل أنني كتبت مقدمة مثيرة للاهتمام لهذه المقالة ، والآن يمكننا أن نذهب مباشرة إلى الأشياء المثيرة للاهتمام حقًا. باختصار ، نحن سوف
استخدم useReducer و useContext لإنشاء ربط React مخصص يوفر الوصول إلى مستودع عمومي مشابه لـ Redux.
لا أفترض بأي حال من الأحوال أن هذا الحل هو المكافئ الكامل لـ Redux ، لأنني متأكد من أنه ليس كذلك. بقولك "استرجاع مثل ،" أعني ،
أنك ستقوم بتحديث المستودع باستخدام الإرسال والإجراءات ، مما يؤدي إلى تغيير حالة المستودع وإرجاع نسخة جديدة من الحالة المتغيرة.
إذا لم تستخدم Redux مطلقًا ، فما عليك سوى التظاهر بعدم قراءة هذه الفقرة.
الغياب
لنبدأ بإنشاء سياق ( يشار إليه فيما يلي باسم " السياق" ) سيحتوي على حالتنا ( يشار إليها فيما يلي باسم الولاية ) ووظيفة إرسال ( يشار إليها فيما يلي بالإرسال ). سنقوم أيضًا بإنشاء وظيفة useStore ، والتي سوف تتصرف مثل خطافنا .
نظرًا لأنه يتم تخزين كل شيء داخل سياق التفاعل ، فأنت بحاجة إلى إنشاء موفر سيعطيه
لنا كائن الدولة وظيفة الإرسال . المزود هو حيث نستخدم useReducer .
نحن نستخدم useReducer للحصول على الدولة والإيفاد . في الواقع ، هذا هو بالضبط ما يفعله useReducer . بعد ذلك ، نقوم بتمرير الحالة وإرسالها إلى المزود .
الآن يمكننا التفاف أي مكون React باستخدام <Provider /> ويمكن لهذا المكون استخدام useStore للتفاعل مع المستودع.
لم نقم بإنشاء المخفض حتى الآن . هذه ستكون خطوتنا التالية.
أنا معجب جدًا بفصل الإجراءات والحالة إلى مجموعات منطقية ، على سبيل المثال: قد تحتاج إلى مراقبة حالة العداد (مثال كلاسيكي لتنفيذ العداد) أو حالة المستخدم (سواء قام المستخدم بتسجيل الدخول إلى النظام أو تفضيلاته الشخصية).
في بعض المكونات ، قد تحتاج إلى الوصول إلى كلتا هاتين الحالتين ، وبالتالي فإن فكرة تخزينها في مستودع عام واحد تعتبر منطقية تمامًا. يمكننا تقسيم إجراءاتنا إلى مجموعات منطقية مثل userActions و countActions ، مما يجعل إدارتها أسهل كثيرًا.
لنقم بإنشاء ملفات countActions.js و userActions.js في مجلد المتجر.
في كلا الملفين ، نقوم بتصدير initialState ، لأننا نريد دمجها لاحقًا في ملف useStore.js في كائن initialState واحد.
نقوم أيضًا بتصدير كائن إجراءات يوفر وظائف لطفرات الحالة. لاحظ أننا لا نعيد كائن حالة جديد ، لأننا نريد أن يحدث هذا في المخفض ، في ملف useStore.js .
الآن نستوردها جميعًا إلى useStore.js للحصول على الصورة كاملة.
لقد فعلنا ذلك! قم بإنشاء دائرة شرف ، وعندما تعود ، سنرى كيف نستخدمها جميعًا في المكون.
اهلا بعودتك آمل أن تكون دائرتك مشرفة حقًا. دعونا نلقي نظرة على useStore في العمل.
أولاً يمكننا التفاف مكون التطبيق لدينا في <StoreProvider /> .
نحن نلف التطبيق في StoreProvider حتى يتمكن المكون الفرعي من الوصول إلى القيمة من المزود. هذه القيمة هي كل حالة والإرسال .
الآن ، لنفترض أن لدينا مكون AppHeader يحتوي على زر تسجيل الدخول / الخروج.
رابط إلى Sandbox Code مع التنفيذ الكامل
المؤلف الأصلي: رامزي
رابط إلى الأصل