Подія зміни запускається на <select>елементі, а не на <option>елементі. Однак це не єдина проблема. Те, як ви визначили changeфункцію, не призведе до повторного відображення компонента. Здається, ви, можливо, ще не повністю зрозуміли концепцію Реагу, тому, можливо, "Мислення в реагуванні" допомагає.
Ви повинні зберігати вибране значення як стан та оновлювати стан, коли значення змінюється. Оновлення стану призведе до повторного відображення компонента.
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);
Також зауважте, що <p>елементи не мають valueатрибута. React / JSX просто копіює добре відомий синтаксис HTML, він не вводить власні атрибути (за винятком keyі ref). Якщо ви хочете, щоб вибране значення було вмістом <p>елемента, тоді просто покладіть його всередину, як і з будь-яким статичним вмістом.
Дізнайтеся більше про обробку подій, контроль стану та форми:
valueбудучи таким же, як внутрішній текст?