O evento de mudança é acionado no <select>elemento, não no <option>elemento. No entanto, esse não é o único problema. A maneira como você definiu a changefunção não causará uma nova renderização do componente. Parece que você talvez ainda não tenha compreendido completamente o conceito de React, então talvez "Pensar em React" ajude.
Você deve armazenar o valor selecionado como estado e atualizar o estado quando o valor for alterado. A atualização do estado acionará uma nova renderização do componente.
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);
Observe também que os <p>elementos não têm um valueatributo. O React / JSX simplesmente replica a conhecida sintaxe HTML, não introduz atributos personalizados (com exceção de keye ref). Se você deseja que o valor selecionado seja o conteúdo do <p>elemento, basta colocá-lo dentro dele, como faria com qualquer conteúdo estático.
Saiba mais sobre a manipulação de eventos, controles de estado e formulário:
valueseja o mesmo que o texto interno?