TypeScript • المستوى الثالث • الدرس 2
العودة لفهرس المستوىإدارة الحالات والأحداث (Typing React Hooks & Event Handlers)
أهداف الدرس العلمية
- تحديد أنواع الحالات الصريحة مع
useStateوقبول القيم المعدومةnull. - تنميط أحداث العناصر (Event Types) مثل
React.ChangeEventوReact.MouseEvent. - التعامل الآمن مع أحداث حقول الإدخال وقراءة
e.target.valueبدون أخطاء. - تطبيق الحماية من أخطاء المراجع الفارغة (Null Safety) في حالة الكائنات المعقدة.
1. تنميط React Hooks (useState)
تستنتج TypeScript نوع الحالة تلقائياً عند استخدام قيم بدائية مثل الأرقام والنصوص، ولكن عند التعامل مع كائنات متغيرة أو حالات تبدأ بـ null، نحرص على توصيف المتغير المستلم أو الواجهة بوضوح.
tsx
// 1️⃣ حالة برقم مستنتجة تلقائياً
const [count, setCount] = useState(0);
// 2️⃣ حالة بكائن مع دعم null — يجب تحديد النوع صراحةً
const [user, setUser] = useState<User | null>(null);
// 3️⃣ إسناد كائن يلتزم بالواجهة
const newUser: User = { id: 101, name: 'جمال', email: '[email protected]' };
setUser(newUser);2. تنميط معالجات الأحداث (Event Handlers)
📝 React.ChangeEvent
تُستخدم مع حقول الإدخال <HTMLInputElement> لقراءة البيانات وتتبع التغييرات بـ e.target.value.
🖱️ React.MouseEvent
تُستخدم لمعالجة نقرات الأزرار والعناصر <HTMLButtonElement> بشكل آمن.
التطبيق العملي المباشر
تحدي الدرس الثاني: إضافة خاصية تسجيل الخروج
قم بالتعديل على الكود بداخل المحرر أدناه لتطبيق المتطلبات التالية:
- قم بإنشاء دالة باسم
handleLogoutتقوم بإعادة تعيين حالةuserإلىnull. - أضف زر جديد باسم "تسجيل الخروج" يظهر فقط عندما يكون الكائن
userغير فارغ. - اربط حدث النقر
onClickللزر الجديد بالدالةhandleLogout. - اختبر تسجيل الدخول ثم تسجيل الخروج بالمعاينة واضغط "تشغيل الكود".
⏳ جارٍ تحميل المحرر التفاعلي...