0Pricing
TypeScript Academy · درس

الخصائص والأبناء؛ معالجات الأحداث؛ المراجع

عرّف الخصائص والأبناء ذات الأنواع، ووصل معالجات الأحداث بأمان، وأنشئ المراجع واستخدمها للوصول إلى عقد DOM.

الخصائص والأبناء؛ معالجات الأحداث؛ المراجع درس مجاني في TypeScript Academy على CoddyKit. هذا هو الدرس 1 من أصل 3. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في TypeScript Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة TypeScript Academy 3 دروس في المجموع.

مقدمة

الهدف: بناء مكوّنات React ذات أنواع محددة: تعريف الخصائص (بما فيها children)، وإرفاق معالجات الأحداث بأنواع دقيقة، والتركيز على حقل إدخال باستخدام المراجع.

  • واجهات خصائص ذات أنواع محددة
  • أنواع معالجات الأحداث
  • المراجع للوصول إلى DOM

خصائص ذات أنواع محددة

صرّح عن واجهة الخصائص؛ واستخدم الخصائص الاختيارية وضيّق نوعها باستخدام القيم الحرفية لاتحاد الأنواع. احتفظ بالقيم الافتراضية داخل المكوّن.

import React from "react"

interface BadgeProps {
  text: string
  color?: "primary" | "success" | "warning"
}

export function Badge({ text, color = "primary" }: BadgeProps) {
  const bg = color === "success" ? "#16a34a" : color === "warning" ? "#d97706" : "#2563eb"
  return <span style={{ backgroundColor: bg, color: "white", padding: 4, borderRadius: 6 }}>{text}</span>
}

export default function App() {
  return (
    <div style={{ display: "grid", gap: 8 }}>
      <Badge text="Saved" color="success" />
      <Badge text="Warn" color="warning" />
    </div>
  )
}

الأبناء

استخدم PropsWithChildren<T> (أو React.PropsWithChildren) لإضافة خانة children ذات نوع محدد إلى خصائصك.

import React, { PropsWithChildren } from "react"

type CardProps = PropsWithChildren<{ title: string }>

function Card({ title, children }: CardProps) {
  return (
    <div style={{ border: "1px solid #e5e7eb", padding: 12, borderRadius: 8 }}>
      <h3 style={{ margin: 0 }}>{title}</h3>
      <div>{children}</div>
    </div>
  )
}

export default function App() {
  return (
    <Card title="Dashboard">
      <p>Children are typed automatically.</p>
    </Card>
  )
}

معالجات الأحداث

فضّل React.MouseEvent<Element> وReact.ChangeEvent<HTMLInputElement>. فهما يوفّران target/currentTarget بأنواع محددة.

import React from "react"

export default function App() {
  const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {
    console.log("clicked", e.currentTarget.name)
  }

  const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {
    console.log("value", e.target.value)
  }

  return (
    <div style={{ display: "grid", gap: 8 }}>
      <input name="n" onChange={handleChange} placeholder="Type here" />
      <button name="ok" onClick={handleClick}>Confirm</button>
    </div>
  )
}

المراجع: الوصول إلى DOM

يحافظ useRef<HTMLInputElement>(null) على مرجع يقبل القيمة الفارغة؛ استخدم التسلسل الاختياري للوصول إلى عقدة DOM بأمان.

import React, { useRef } from "react"

export default function App() {
  const inputRef = useRef<HTMLInputElement>(null)

  const focusInput = () => {
    inputRef.current?.focus()
  }

  return (
    <div style={{ display: "grid", gap: 8 }}>
      <input ref={inputRef} placeholder="Focus me" />
      <button onClick={focusInput}>Focus</button>
    </div>
  )
}

تمرير المراجع

يتيح forwardRef للآباء الوصول إلى عقدة DOM في الابن. حدّد نوع العنصر للحصول على تحديد دقيق للنوع.

import React, { forwardRef } from "react"

type TextInputProps = { label: string }

const TextInput = forwardRef<HTMLInputElement, TextInputProps>(function TextInput({ label }, ref) {
  return (
    <label style={{ display: "grid", gap: 4 }}>
      <span>{label}</span>
      <input ref={ref} />
    </label>
  )
})

export default function App() {
  const setRef = (el: HTMLInputElement | null) => { if (el) el.focus() }
  return <TextInput ref={setRef} label="Auto focus" />
}

التحقق من أنواع الأحداث

تحقق سريع: ما النوع الصحيح لمعالج النقر على زر؟

مراجعة

مراجعة: عرّف الخصائص (بما فيها children)، وحدّد أنواع الأحداث بدقة، واستخدم المراجع (بما فيها forwardRef) للوصول إلى عقد DOM بأمان.

الأسئلة الشائعة

هل درس «الخصائص والأبناء؛ معالجات الأحداث؛ المراجع» مجاني؟

نعم — نص درس «الخصائص والأبناء؛ معالجات الأحداث؛ المراجع» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة TypeScript Academy، انتقل إلى CoddyKit PRO. تتضمن دورة TypeScript Academy 3 دروس في المجموع.

ماذا ستتعلم في «الخصائص والأبناء؛ معالجات الأحداث؛ المراجع»؟

عرّف الخصائص والأبناء ذات الأنواع، ووصل معالجات الأحداث بأمان، وأنشئ المراجع واستخدمها للوصول إلى عقد DOM. تتمرن على TypeScript Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ TypeScript Academy؟

لا تُشترط خبرة سابقة. TypeScript Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 3.

كم من الوقت يستغرق درس «الخصائص والأبناء؛ معالجات الأحداث؛ المراجع»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس TypeScript Academy هذا؟

نعم. كل درس في TypeScript Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. الخصائص والأبناء؛ معالجات الأحداث؛ المراجع
  2. الحالة والمختزلات؛ كتابة Context
  3. الأنواع العامة للمكوّنات — مقدمة
← العودة إلى TypeScript Academy