Reactالدالة useReducer()
- مقدمة للدالة
useReducer() في React - تحضير مشروع للتطبيق العملي
- مراقبة حالة خصائص الكائن في React
- مراقبة حالة خصائص مجموعة من الكائنات في React
مقدمة للدالة useReducer() في React
تستخدم هذه الدالة لمراقبة أي تغيير يحصل في مجموعة قيم سواء كانت عبارة عن خصائص تابعة لكائن واحد أو كانت أكثر تعقيداً كمصفوفة تحتوي على مجموعة من الكائنات.
فكرة هذه الدالة مشابهة جداً للدالة useState() و لكنها خيار أسهل للإستخدام في حال كان المراد مراقبة حالة مجموعة من القيم.
إذا كنت بحاجة لمراقبة حالة عدة متغيرات تابعة لنفس المكوّن، فيمكنك تجميع هذه المتغيرات كخصائص في كائن واحد و استخدام useReducer() لمراقبة أي تغيير يحصل فيها بدلاً من استخدام الدالة useState() لمراقبة حالة كل متغير منهم على حدا.
هذه الدالة هي من ضمن دوال الهووكس ( Hooks ) التي يمكن استخدامها في المكوّن المبني بأسلوب Function Component.
طريقة تضمينها
حتى تتمكن من استخدام الدالة useReducer() يجب تضمينها أولاً كما يلي.
الشكل العام لاستخدامها
عند استخدام هذه الدالة فإنه يتم ربطها بالشيء الذي سيتم مراقبة قيمته و بالدالة التي من خلالها سيتم تحديث قيمته.
state _ إسم المتغير الذي سيتم مراقبة حالته.
dispatch _ إسم الدالة التي يمكن من خلالها تحديث قيمة المتغير.
reducer _ إسم الدالة التي نحدد من خلالها كيف سيتم تحديث قيمة المتغير.
initialArg _ القيمة التي سيتم مراقبتها، عادةً ما تكون كائن أو مصفوفة فيها كائنات.
init? _ هو باراميتر إختياري مكانه يمكن تمرير دالة تقوم بإحضار القيم الأولية التي سيتم مراقبتها.
تحضير مشروع للتطبيق العملي
إفعل الخطوات التالية تباعاً حتى تنشئ مشروع جديد و تطبق فيه الأمثلة كما فعلنا بالضبط:
- قم بإنشاء مشروع جديد إسمه
demo-app.
- بداخل المجلد
src تجد ملف إسمه App.js قم بحذف كل الكود الإفتراضي الموجود فيه.
- بداخل المجلد
src قم بإنشاء مجلد جديد إسمه components لأننا سنضع بداخله مكوّنات.
- بداخل المجلد
components قم بإنشاء ملف إسمه MyComponent.js لأنه سيمثل مكوّن.
في هذا المشروع قمنا بتجهيز مكوّن واحد هو <MyComponent> لأننا سنقوم لاحقاً بعرض محتواه و تحديث قيم خصائصه بعد عرضها في المكون <App>.
مراقبة حالة خصائص الكائن في React
في المثال التالي، قمنا بتعريف كائن إسمه initialData وضعنا فيه كائن يمثل المعلومات الأساسية التي نريد مراقبتها.
بعدها قمنا بتعريف دالة إسمها reducer() يمكن من خلالها تحديث قيم موجودة في شيء نوعه Reducer.
بعدها قمنا بتعريف مكوّن إسمه <MyComponent> يحتوي على مربع نص و زر بالإضافة إلى فقرة.
في هذا المكوّن أنشأنا Reducer بهدف حفظ جميع القيم القابلة للتحديث فيه على النحو التالي:
- القيم ستتخزن على شكل خصائص في كائن إسمه
state و الذي وضعنا فيه نسخة من الكائن initialData كقيمة أولية.
- يمكن تحديث القيم من خلال استدعاء دالة إسمها
dispatch() و التي تقوم داخلياً باستدعاء الدالة reducer().
في النهاية قمنا بعرض المكوّن <MyComponent> في المكوّن <App> لتجربته.
مثال
/src/components/MyComponent.js
جرب الكود
مراقبة حالة خصائص مجموعة من الكائنات في React
في المثال التالي، قمنا بتعريف مصفوفة كائنات إسمها initialTasks وضعنا فيه ثلاث عناصر (كائنات) نريد مراقبة قيمها.
بعدها قمنا بتعريف دالة إسمها reducer() يمكن من خلالها تحديث القيم الموجودة في شيء Reducer.
بعدها قمنا بتعريف مكوّن إسمه <MyComponent> عرضنا فيه قيم الكائنات كخانات إختيار.
في هذا المكوّن أنشأنا Reducer بهدف حفظ قيم الكائنات الموضوعة كعناصر في المصفوفة فيه على النحو التالي:
- مصفوفة الكائنات ستتخزن في مصفوفة إسمها
tasks و التي وضعنا فيها نسخة من عناصر المصفوفة initialTasks كقيمة أولية.
- يمكن تحديث قيم عناصر المصفوفة من خلال استدعاء دالة إسمها
dispatch() و التي تقوم داخلياً باستدعاء الدالة reducer().
في النهاية قمنا بعرض المكوّن <MyComponent> في المكوّن <App> لتجربته.
مثال
/src/components/MyComponent.js
جرب الكود