Saya perlu membuat formulir yang akan menampilkan sesuatu berdasarkan nilai pengembalian API. Saya bekerja dengan kode berikut:
class App extends React.Component {
constructor(props) {
super(props);
this.state = {value: ''};
this.handleChange = this.handleChange.bind(this);
this.handleSubmit = this.handleSubmit.bind(this);
}
handleChange(event) {
this.setState({value: event.target.value});
}
handleSubmit(event) {
alert('A name was submitted: ' + this.state.value); //error here
event.preventDefault();
}
render() {
return (
<form onSubmit={this.handleSubmit}>
<label>
Name:
<input type="text" value={this.state.value} onChange={this.handleChange} /> // error here
</label>
<input type="submit" value="Submit" />
</form>
);
}
}
Saya mendapatkan kesalahan berikut:
error TS2339: Property 'value' does not exist on type 'Readonly<{}>'.
Saya mendapatkan kesalahan ini dalam dua baris yang saya komentari pada kode. Kode ini bahkan bukan milik saya, saya mendapatkannya dari situs resmi reaksi ( https://reactjs.org/docs/forms.html ), tetapi tidak berfungsi di sini.
Saya menggunakan alat buat-reaksi-aplikasi.
reactjs
typescript
Luis Henrique Zimmermann
sumber
sumber
Jawaban:
The
Component
didefinisikan seperti:Yang berarti bahwa jenis default untuk negara (dan alat peraga) adalah:
{}
.Jika Anda ingin komponen Anda memiliki
value
status maka Anda perlu mendefinisikannya seperti ini:Atau:
sumber
Selain jawaban @ nitzan-tomer, Anda juga memiliki opsi untuk menggunakan inferfaces :
Baik-baik saja, selama Anda konsisten.
sumber
Masalahnya adalah Anda belum mendeklarasikan status antarmuka Anda menggantikan apa pun dengan jenis variabel 'nilai' yang sesuai.
Ini referensi yang bagus
sumber
event.target
adalah tipeEventTarget
yang tidak selalu memiliki nilai. Jika elemen DOM, Anda harus melemparkannya ke jenis yang benar:Ini akan menyimpulkan tipe "benar" untuk variabel keadaan juga meskipun menjadi eksplisit mungkin lebih baik
sumber