Acara perubahan dipicu pada <select>
elemen, bukan <option>
elemen. Namun, itu bukan satu-satunya masalah. Cara Anda mendefinisikan change
fungsi tidak akan menyebabkan rerender komponen. Sepertinya Anda mungkin belum sepenuhnya memahami konsep Bereaksi, jadi mungkin "Berpikir dalam Bereaksi" membantu.
Anda harus menyimpan nilai yang dipilih sebagai status dan memperbarui status saat nilai berubah. Memperbarui status akan memicu rerender komponen.
var MySelect = React.createClass({
getInitialState: function() {
return {
value: 'select'
}
},
change: function(event){
this.setState({value: event.target.value});
},
render: function(){
return(
<div>
<select id="lang" onChange={this.change} value={this.state.value}>
<option value="select">Select</option>
<option value="Java">Java</option>
<option value="C++">C++</option>
</select>
<p></p>
<p>{this.state.value}</p>
</div>
);
}
});
React.render(<MySelect />, document.body);
Perhatikan juga bahwa <p>
elemen tidak memiliki value
atribut. Bereaksi / JSX hanya mereplikasi sintaks HTML yang terkenal, itu tidak memperkenalkan atribut khusus (dengan pengecualian dari key
dan ref
). Jika Anda ingin nilai yang dipilih menjadi konten <p>
elemen maka cukup masukkan ke dalamnya, seperti yang akan Anda lakukan dengan konten statis apa pun.
Pelajari lebih lanjut tentang penanganan acara, kontrol status dan formulir:
value
menjadi sama dengan teks bagian dalam?event.target.textContent
event.target.slectedOptions[0].label
.sumber
React Hooks (16.8+):
sumber
Terima kasih Felix Kling, tetapi jawabannya perlu sedikit perubahan:
sumber
this.change.bind
dionChange
?Jika Anda menggunakan pilih sebagai inline ke komponen lain, maka Anda juga dapat menggunakan seperti yang diberikan di bawah ini.
Dan pada komponen di mana pilih digunakan, tentukan fungsi untuk menangani onChange seperti di bawah ini:
sumber
sumber