Reactالدالة useState()
- مقدمة للدالة
useState() في React - تحضير مشروع للتطبيق العملي
- تحديث حالة متغير في React
- تحديث حالة مربع النص في React
- تحديث حالة خانة الإختيار في React
- تحديث حالة كائن في React
- تحديث حالة مصفوفة كائنات في React
مقدمة للدالة useState() في React
تستخدم هذه الدالة لمراقبة أي تغيير يحصل في قيمة متغير، مصفوفة أو كائن موجود في المكوّن.
هذه الدالة هي من ضمن دوال الهووكس ( Hooks ) التي يمكن استخدامها في المكوّن المبني بأسلوب Function Component.
طريقة تضمينها
حتى تتمكن من استخدام الدالة useState() يجب تضمينها أولاً كما يلي.
الشكل العام لاستخدامها
عند استخدام هذه الدالة فإنه يتم ربطها بالشيء الذي سيتم مراقبة قيمته و بالدالة التي من خلالها سيتم تحديث قيمته.
state _ إسم المتغير الذي سيتم مراقبة حالته.
setState _ إسم الدالة التي ستقوم بتحديث قيمة المتغير.
initialState _ القيمة الأولية التي سيتم إعطاءها للمتغير.
تحضير مشروع للتطبيق العملي
إفعل الخطوات التالية تباعاً حتى تنشئ مشروع جديد و تطبق فيه الأمثلة كما فعلنا بالضبط:
- قم بإنشاء مشروع جديد إسمه
demo-app.
- بداخل المجلد
src تجد ملف إسمه App.js قم بحذف كل الكود الإفتراضي الموجود فيه.
- بداخل المجلد
src قم بإنشاء مجلد جديد إسمه components لأننا سنضع بداخله مكوّنات.
- بداخل المجلد
components قم بإنشاء ملف إسمه MyComponent.js لأنه سيمثل مكوّن.
في هذا المشروع قمنا بتجهيز مكوّن واحد هو <MyComponent> لأننا سنقوم لاحقاً بعرض محتواه و تحديث قيم خصائصه بعد عرضها في المكون <App>.
تحديث حالة متغير في React
في المثال التالي، في المكوّن <MyComponent> قمنا بتعريف متغير إسمه counter مع ربطه بدالة إسمها setCounter().
في هذا المكوّن وضعنا أيضاً زر، كلما تم النقر عليه سيتم استدعاء دالة إسمها increment() و التي تقوم داخلياً باستدعاء الدالة setCounter() لكي تقوم بتحديث قيمته (أي حالته)، فعلياً سنضيف واحد عليها في كل مرة.
بعدها قمنا بعرض المكوّن <MyComponent> في المكوّن <App> لتجربته.
المثال الأول
/src/components/MyComponent.js
جرب الكود
المثال التالي هو تطوير للمثال السابق حيث قمنا بإضافة زر جديد في المكوّن <MyComponent> عند تم النقر عليه يتم استدعاء دالة إسمها decrement() و التي تقوم داخلياً باستدعاء الدالة setCounter() لإنقاص قيمة المتغير counter.
المثال الثاني
/src/components/MyComponent.js
جرب الكود
تحديث حالة مربع النص في React
في المثال التالي، في المكوّن <MyComponent> قمنا بتعريف متغير إسمه text مع ربطه بدالة إسمها setText().
في هذا المكوّن وضعنا أيضاً مربع نص، كلما تم تغيير قيمته سيتم استدعاء دالة إسمها handleChange() و التي تقوم داخلياً باستدعاء الدالة setText() لكي تقوم بوضع قيمة مربع النص الجديدة في المتغير text.
بعدها قمنا بعرض المكوّن <MyComponent> في المكوّن <App> لتجربته.
مثال
/src/components/MyComponent.js
جرب الكود
تحديث حالة خانة الإختيار في React
في المثال التالي، في المكوّن <MyComponent> قمنا بتعريف متغير إسمه liked مع ربطه بدالة إسمها setLiked().
في هذا المكوّن وضعنا أيضاً خانة إختيار ( Checkbox )، كلما تم تغيير قيمتها سيتم استدعاء دالة إسمها handleChange() و التي تقوم داخلياً باستدعاء الدالة setLiked() لكي تقوم بوضع قيمة خانة الإختيار الجديدة في المتغير liked.
بعدها قمنا بعرض المكوّن <MyComponent> في المكوّن <App> لتجربته.
مثال
/src/components/MyComponent.js
جرب الكود
تحديث حالة كائن في React
في المثال التالي، في المكوّن <MyComponent> قمنا بتعريف كائن إسمه form مع ربطه بدالة إسمها setForm().
في هذا المكوّن وضعنا بعض الحقول، كلما تم تغيير قيمة أحدها سيتم استدعاء دالة إسمها handleChange() و التي تقوم داخلياً باستدعاء الدالة setForm() لكي تقوم بوضع القيم الجديدة لخصائص الكائن form.
بعدها قمنا بعرض المكوّن <MyComponent> في المكوّن <App> لتجربته.
مثال
/src/components/MyComponent.js
جرب الكود
تحديث حالة مصفوفة كائنات في React
في المثال التالي، جعلنا المكوّن <MyComponent> يتألف من 3 أقسام:
- حاوية تسمح بإضافة مستخدم جديد.
- قائمة تعرض جميع المستخدمين و تسمح بتعديل قيمهم.
- فقرة تعرض إجمالي عدد المستخدمين الحاليين.
في البداية قمنا بتعريف مصفوفة إسمها initialUsers وضعنا فيها كائنات، كل كائن منهم يحتوي على معلومات مستخدم واحد.
لأجل أن يملك كل مستخدم جديد يتم إضافته رقم تعرفة ( Id ) بشكل تلقائي، قمنا بتعريف متغير عام إسمه nextId و جعلنا قيمته تزداد واحداً مع كل مستخدم جديد يتم إضافته.
لجعل بيانات المصفوفة قابلة للتعديل في واجهة المستخدم، قمنا بإنشاء مصفوفة إسمها users وضعنا فيه جميع عناصر المصفوفة initialUsers و ربطناها بدالة إسمها setUsers() ليكون بالإمكان تحديث قيمها من خلالها.
أي مستخدم جديد سيتم إضافته، سيعتمد على متغير إسمه newUsername مربوط بدالة إسمها setNewUsername() ليكون بالإمكان تمرير قيمته بسهولة للدالة setUsers() و التي ستقوم بإضافتها لكائن (مستخدم) جديد في المصفوفة users.
في النهاية قمنا بعرض المكوّن <MyComponent> في المكوّن <App> لتجربته.
مثال
/src/components/MyComponent.js
جرب الكود
فهم كود المثال السابق أمر يتطلب وقت لأنه كبير و يشمل كل ما درسته سابقاً. لهذا حتى لو استغرقت يوم كامل في دراسته فهذا أمر طبيعي. و بالطبع قم بتجربته على حاسوبك و اقرأ التعليقات الموضوعة على الكود جيداً و تلاعب به كيفما شئت حتى تفهمه.