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?