React Academy · Pelajaran

Menaip Peristiwa & Rujukan dalam TypeScript

Gunakan generik React.ChangeEvent, React.MouseEvent dan RefObject untuk interaksi DOM.

Pelajaran 2 daripada 413 langkah

Menaip Peristiwa & Rujukan dalam TypeScript ialah pelajaran React Academy percuma di CoddyKit. Ini ialah pelajaran 2 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran React Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus React Academy merangkumi sejumlah 4 pelajaran.

Peristiwa Sintetik React

React membalut peristiwa DOM natif dalam SyntheticEvent. Setiap jenis peristiwa mempunyai generik khusus: React.ChangeEvent<HTMLInputElement>, React.MouseEvent<HTMLButtonElement> dan sebagainya.

Menentukan Jenis onChange

Peristiwa yang paling biasa ialah onChange pada medan input. Tentukan jenis pengendalinya dengan React.ChangeEvent<HTMLInputElement>.

function SearchInput() {
  const [value, setValue] = useState('');

  const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {
    setValue(e.target.value);
  };

  return <input value={value} onChange={handleChange} />;
}

Menentukan Jenis onClick

Klik butang menggunakan React.MouseEvent<HTMLButtonElement>. Akses e.currentTarget, e.preventDefault() dan e.stopPropagation() dengan penentuan jenis yang lengkap.

function DeleteButton({ onDelete }: { onDelete: () => void }) {
  const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {
    e.stopPropagation();
    onDelete();
  };
  return <button onClick={handleClick}>Delete</button>;
}

Menentukan Jenis onSubmit

Penghantaran borang menggunakan React.FormEvent<HTMLFormElement>. Sentiasa panggil e.preventDefault() untuk menghentikan navigasi pelayar lalai.

function LoginForm() {
  const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {
    e.preventDefault();
    const form = e.currentTarget;
    const email = (form.elements.namedItem('email') as HTMLInputElement).value;
    console.log(email);
  };
  return (
    <form onSubmit={handleSubmit}>
      <input name="email" />
      <button type="submit">Login</button>
    </form>
  );
}

Menentukan Jenis Peristiwa Papan Kekunci

Gunakan React.KeyboardEvent<HTMLElement> untuk menentukan jenis pengendali papan kekunci. Akses e.key, e.code dan e.ctrlKey dengan selamat.

function CommandInput() {
  const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {
    if (e.key === 'Enter' && e.metaKey) {
      submitCommand();
    }
  };
  return <input onKeyDown={handleKeyDown} />;
}

useRef untuk Elemen DOM

Hantar jenis elemen HTML sebagai generik kepada useRef dan mulakannya dengan null. Dengan itu, TypeScript mengetahui bahawa rujukan tersebut menyimpan jenis elemen itu.

function AutoFocusInput() {
  const inputRef = useRef<HTMLInputElement>(null);

  useEffect(() => {
    inputRef.current?.focus();
  }, []);

  return <input ref={inputRef} />;
}

Rujukan Boleh Ubah berbanding Rujukan DOM

Apabila menyimpan nilai boleh ubah (bukan nod DOM), mulakan useRef dengan suatu nilai dan bukannya null. TypeScript akan membuat inferens terhadap MutableRefObject yang boleh diubah.

// DOM ref (read-only current)
const divRef = useRef<HTMLDivElement>(null);

// Mutable ref (read-write current)
const countRef = useRef<number>(0);
countRef.current += 1; // ✓ no TypeScript error

Menentukan Jenis useImperativeHandle

Apabila mendedahkan API rujukan daripada komponen anak, takrifkan antara muka untuk pemegang tersebut dan gunakannya dalam kedua-dua forwardRef dan useImperativeHandle.

interface DialogHandle {
  open: () => void;
  close: () => void;
}

const Dialog = forwardRef<DialogHandle, { title: string }>((props, ref) => {
  useImperativeHandle(ref, () => ({
    open: () => console.log('open'),
    close: () => console.log('close'),
  }));
  return <div>{props.title}</div>;
});

Panggilan Balik Rujukan

Panggilan balik rujukan menerima elemen DOM atau null. Tentukan jenisnya sebagai (node: HTMLElement | null) => void.

function MeasureDiv() {
  const [height, setHeight] = useState(0);

  const measuredRef = (node: HTMLDivElement | null) => {
    if (node) setHeight(node.getBoundingClientRect().height);
  };

  return <div ref={measuredRef}>Content: {height}px tall</div>;
}

Sasaran Peristiwa berbanding Sasaran Semasa

e.target ialah elemen yang mencetuskan peristiwa; e.currentTarget ialah elemen yang dilampirkan pengendali. Tukarkan jenis e.target apabila anda memerlukan sifat khusus.

const handleClick = (e: React.MouseEvent<HTMLUListElement>) => {
  const target = e.target as HTMLLIElement;
  console.log(target.dataset.id);
};

Jenis Pengendali Peristiwa Generik

Untuk menulis fungsi pengendali peristiwa yang boleh digunakan semula, gunakan generik React.EventHandler<Event> atau tulis sahaja tandatangan fungsi penuh secara sebaris.

type InputChangeHandler = React.ChangeEventHandler<HTMLInputElement>;

const logChange: InputChangeHandler = (e) => {
  console.log(e.target.value); // e is fully typed
};

Semakan Pantas

Jenis TypeScript manakah yang patut digunakan untuk useRef yang menyimpan HTMLInputElement?

Rumusan

Tentukan jenis pengendali peristiwa dengan generik React.ChangeEvent, React.MouseEvent dan React.FormEvent. Tentukan jenis rujukan DOM dengan useRef<HTMLElement>(null) dan rujukan boleh ubah dengan jenis nilainya. Gunakan forwardRef bersama antara muka pemegang yang dinyatakan dengan jelas untuk API imperatif.

Percuma untuk bermula

Pelajari React dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
88
Pelajaran
324

Soalan Lazim

Adakah pelajaran “Menaip Peristiwa & Rujukan dalam TypeScript” percuma?

Ya — teks penuh “Menaip Peristiwa & Rujukan dalam TypeScript” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus React Academy, tingkat taraf kepada CoddyKit PRO. Kursus React Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Menaip Peristiwa & Rujukan dalam TypeScript”?

Gunakan generik React.ChangeEvent, React.MouseEvent dan RefObject untuk interaksi DOM. Anda berlatih React Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan React Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran React Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 2 daripada 4.

Berapa lamakah pelajaran “Menaip Peristiwa & Rujukan dalam TypeScript” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran React Academy ini?

Ya. Setiap pelajaran React Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Menaip Prop & Jenis Pemulangan Komponen
  2. Menaip Peristiwa & Rujukan dalam TypeScript
  3. Komponen Generik & Jenis Utiliti
  4. Menaip Konteks & Cangkuk Tersuai
← Kembali ke React Academy