useReducer: إدارة State كبيرة بسهولة في React

x32x01
  • بواسطة x32x01 ||
تخيل معايا كده عندك تطبيق Task Management 📝، المستخدم بيضيف مهام جديدة، يعدل عليها، أو يحذفها. مع كل خطوة بيعملها، التطبيق محتاج يتعامل مع الـ state ويعدلها.

في البداية، الموضوع بسيط وبتستخدم useState لكل حالة، لكن كل ما التطبيق كبر، هتلاقي نفسك بتتعامل مع أكتر من حالة في نفس الوقت:
  • حالة المهام
  • حالة الفلترة
  • حالة الترتيب
وهنا الموضوع بيبقى معقد 😅.

ليه نستخدم useReducer؟ 🤔

مع useReducer:
  • كل الأكشنز اللي بتحصل في التطبيق (زي إضافة task أو حذف task) بتمر على نفس المكان اللي هو الـ reducer function.
  • بدل ما الحالات تكون متفرقة في كل مكان، كل حاجة بتعدي على نقطة واحدة بس، وده بيخلي الكود منظم وأسهل للصيانة.
  • لو كنت بتستخدم useState لأكتر من حالة، هتلاقي نفسك بتكرر نفس الكود، لكن useReducer بيخلي كل الأكشنز تتعامل بنفس الطريقة.

متى useReducer أفضل من useState؟ ⚡

لو التطبيق بسيط وحالة واحدة أو اتنين، useState كويس.
لكن لو التطبيق كبير وفيه حالات متعددة مرتبطة ببعض، useReducer هيحللك مشاكل التعقيد وهيخلي إدارة الحالات منظمة ومركزية.

مثال عملي: Counter صغير 🖥️

1. استخدام useState:
JavaScript:
import React, { useState } from 'react';

function Counter() {
const [count, setCount] = useState(0);

return ( <div> <p>Count: {count}</p>
<button onClick={() => setCount(count + 1)}>زيادة</button> </div>
);
}

export default Counter;

2. استخدام useReducer:
JavaScript:
import React, { useReducer } from 'react';

const countReducer = (state, action) => {
switch (action.type) {
case 'INCREMENT':
return state + 1;
default:
return state;
}
};

function Counter() {
const [count, dispatch] = useReducer(countReducer, 0);

return ( <div> <p>Count: {count}</p>
<button onClick={() => dispatch({ type: 'INCREMENT' })}>زيادة</button> </div>
);
}

export default Counter;

ليه useReducer مناسب للتطبيقات الكبيرة؟ 📈

  • لما المشروع يكبر، الكود بيبقى منظم وسهل التعديل.
  • لو حبيت تضيف ميزة جديدة زي حفظ الطلبات السابقة، كل الأكشنز بتكون مركزة في مكان واحد فقط.
  • لما الحالات مرتبطة ببعض (زي الطلبات والفلترة والترتيب في مثال المطعم)، useReducer بيخلي إدارة العلاقات بين الحالات أسهل.

الخلاصة 📝

useReducer بيخليك تنظم الأكشنز والحالات في مكان واحد، ويوفر مجهود إدارة كل حاجة بشكل منفصل. لو التطبيق بتاعك بيكبر ومحتاج طريقة أحسن لإدارة الحالات، useReducer هيكون اختيارك المفضل 💪.
لو عندك سؤال أو استفسار، اكتب في الكومنتات 👇.
 
التعديل الأخير:
المواضيع ذات الصلة
x32x01
الردود
0
المشاهدات
568
x32x01
x32x01
x32x01
الردود
0
المشاهدات
637
x32x01
x32x01
x32x01
الردود
0
المشاهدات
579
x32x01
x32x01
x32x01
الردود
0
المشاهدات
602
x32x01
x32x01
x32x01
الردود
0
المشاهدات
346
x32x01
x32x01
x32x01
الردود
0
المشاهدات
387
x32x01
x32x01
x32x01
الردود
0
المشاهدات
342
x32x01
x32x01
x32x01
الردود
0
المشاهدات
359
x32x01
x32x01
x32x01
الردود
0
المشاهدات
334
x32x01
x32x01
x32x01
الردود
0
المشاهدات
439
x32x01
x32x01
الدخول أو التسجيل السريع
نسيت كلمة مرورك؟
إحصائيات المنتدى
المواضيع
1,830
المشاركات
2,027
أعضاء أكتب كود
464
أخر عضو
رشن7
عودة
أعلى