Menaip Peristiwa & Rujukan dalam TypeScript
Gunakan generik React.ChangeEvent, React.MouseEvent dan RefObject untuk interaksi DOM.
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 errorMenentukan 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.
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
- Menaip Prop & Jenis Pemulangan Komponen
- Menaip Peristiwa & Rujukan dalam TypeScript
- Komponen Generik & Jenis Utiliti
- Menaip Konteks & Cangkuk Tersuai