Apa tipe yang benar untuk event React. Awalnya saya hanya menggunakannya any
demi kesederhanaan. Sekarang, saya mencoba untuk membersihkan semuanya dan menghindari penggunaan any
sepenuhnya.
Jadi dalam bentuk yang sederhana seperti ini:
export interface LoginProps {
login: {
[k: string]: string | Function
uname: string
passw: string
logIn: Function
}
}
@inject('login') @observer
export class Login extends Component<LoginProps, {}> {
update = (e: React.SyntheticEvent<EventTarget>): void => {
this.props.login[e.target.name] = e.target.value
}
submit = (e: any): void => {
this.props.login.logIn()
e.preventDefault()
}
render() {
const { uname, passw } = this.props.login
return (
<div id='login' >
<form>
<input
placeholder='Username'
type="text"
name='uname'
value={uname}
onChange={this.update}
/>
<input
placeholder='Password'
type="password"
name='passw'
value={passw}
onChange={this.update}
/>
<button type="submit" onClick={this.submit} >
Submit
</button>
</form>
</div>
)
}
}
Jenis apa yang saya gunakan di sini sebagai jenis acara?
React.SyntheticEvent<EventTarget>
sepertinya tidak berfungsi karena saya mendapatkan kesalahan itu name
dan value
tidak ada target
.
Jawaban yang lebih umum untuk semua acara akan sangat dihargai.
Terima kasih
sumber
e.key
hanya bagian dari acara keyboard.Masalahnya bukan pada tipe Peristiwa, tetapi antarmuka EventTarget di skrip tipe hanya memiliki 3 metode:
Jadi itu benar
name
danvalue
tidak ada di EventTarget. Yang perlu Anda lakukan adalah mentransmisikan target ke jenis elemen tertentu dengan properti yang Anda butuhkan. Dalam hal ini akan terjadiHTMLInputElement
.Juga untuk acara bukannya React.SyntheticEvent, Anda juga dapat mengetik mereka sebagai berikut:
Event
,MouseEvent
,KeyboardEvent
... dll, tergantung pada kasus penggunaan pawang.Cara terbaik untuk melihat semua definisi tipe ini adalah dengan memeriksa file .d.ts dari kedua skrip & react.
Lihat juga tautan berikut untuk penjelasan lebih lanjut: Mengapa Event.target bukan Elemen di Skrip Ketik?
sumber
Untuk menggabungkan jawaban Nitzan dan Edwin, saya menemukan bahwa sesuatu seperti ini berhasil untuk saya:
sumber
Menurut saya cara yang paling sederhana adalah:
sumber
.ChangeEvent
adalah kuncinya bagi sayaAnda dapat melakukan seperti ini dalam bereaksi
sumber