Event Types توصيف أنواع الأحداث
آخر تحديث: 2026-11-03
Event Types توصيف أنواع الأحداث
تأتي أنواع الأحداث من @types/react: يُنمَّط onClick كـ MouseEvent<HTMLButtonElement> وonChange كـ ChangeEvent<HTMLInputElement>. بمجرد توصيفها يقدّم currentTarget تلميحات دقيقة عن العنصر لا عنصرًا عامًا. وتوصيف معالج سطري اختياري لأن سمة JSX توفّر النوع لك. وللمعالج الذي تفصله بدالة مستقلة اكتب التوصيف يدويًا فيبقى المحرّر يفحصه.
| المجموعة | البيانات والهندسة |
|---|---|
| النوع | نمط |
ℹ️ ملاحظة يحوّل المحرّر JSX إلى JavaScript ويعرض الواجهة الحقيقية داخل بيئة معزولة؛ تُركَّب المكوّنات تلقائياً دون استدعاء render يدوي.
📝 الصيغة
function SearchBox() {
const [kw, setKw] = useState('')
const onChange = (e: React.ChangeEvent<HTMLInputElement>) => {
setKw(e.currentTarget.value) // currentTarget is inferred as HTMLInputElement
}
const onSubmit = (e: React.FormEvent<HTMLFormElement>) => {
e.preventDefault()
}
return (
<form onSubmit={onSubmit}>
<input value={kw} onChange={onChange} />
</form>
)
}
// The inline form needs no annotation: onChange={e => setKw(e.target.value)} - e is inferred
القيمة المرجعة:لا قيمة مرجعة؛ إنها نمط برمجي وليست واجهة قابلة للاستدعاء.
▶ مثال
المثال يعمل مباشرة: يُعرض تلقائياً عند التوسيع وتظهر التعديلات فوراً.
الناتج:
الكتابة تسجّل ChangeEvent<HTMLInputElement> والنقر يسجّل MouseEvent<HTMLButtonElement>، مع آخر أربع مدخلات أدناه — هذه أحداث عادية وقت التشغيل، وتوصيفات TypeScript في كتلة syntax.
💡 النقاط الأساسية
💡 نصيحة في الصيغة السطرية onChange={e => …} يُستنتج e تلقائيًا، فلا تحتاج توصيفًا صريحًا إلا بفصل المعالج في دالة مستقلة.
ℹ️ ملاحظة تحمل أنواع الأحداث التركيبية معامل نوع يسمّي العنصر: بغيره تحصل Element، ومع عنصر محدّد تدقّ تلميحات currentTarget.
⚠️ تحذير نوع e.target واسع (قد يكون أي عنصر)، فافحص العنصر قبل قراءة value؛ أما e.currentTarget فهو العنصر المربوط به المعالج ونوعه دائمًا دقيق.
🏷️ المزيد من البيانات والهندسة
💡 حالات ذات صلة
المزيد من الحالات قريباً.
📚 دروس ذات صلة
❓ الأسئلة الشائعة
س لماذا لا نستخدم نوع MouseEvent الأصلي؟
ج أحداث React تركيبية (غلاف متصفّحات) ولا تحمل الأنواع الأصلية استنتاج عام React، فمزجها يعطي تلميحات خاطئة. استخدم React.MouseEvent وما شابه بانتظام.
س كيف أوصّف onChange لمكوّني الخاص؟
ج يتبع props مكوّنك: type Props = { onChange: (v: string) => void }. فيستنتج المستدعي e من توقيعك بلا حاجة لنوع حدث تركيبي.
س لماذا يكون e.currentTarget فارغًا في رد نداء غير متزامن؟
ج يُضبط currentTarget إلى null بعد عودة المعالج. احفظه أولًا — const el = e.currentTarget — واستخدم el داخل رد النداء.