Acara perubahan dipicu pada <select>elemen, bukan <option>elemen. Namun, itu bukan satu-satunya masalah. Cara Anda mendefinisikan changefungsi 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 valueatribut. Bereaksi / JSX hanya mereplikasi sintaks HTML yang terkenal, itu tidak memperkenalkan atribut khusus (dengan pengecualian dari keydan 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:
valuemenjadi sama dengan teks bagian dalam?