El evento de cambio se activa en el <select>elemento, no en el <option>elemento. Sin embargo, ese no es el único problema. La forma en que definió la changefunción no provocará una devolución del componente. Parece que todavía no has entendido completamente el concepto de React, por lo que tal vez "Pensar en reaccionar" ayude.
Debe almacenar el valor seleccionado como estado y actualizar el estado cuando cambie el valor. La actualización del estado desencadenará una devolución del 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);
También tenga en cuenta que los <p>elementos no tienen un valueatributo. React / JSX simplemente replica la conocida sintaxis HTML, no introduce atributos personalizados (con la excepción de keyy ref). Si desea que el valor seleccionado sea el contenido del <p>elemento, simplemente colóquelo dentro, como lo haría con cualquier contenido estático.
Obtenga más información sobre el manejo de eventos, los controles de estado y formulario:
valuesea el mismo que el texto interno?event.target.textContentevent.target.slectedOptions[0].label.fuente
Ganchos de reacción (16.8+):
fuente
Gracias Felix Kling, pero su respuesta necesita un pequeño cambio:
fuente
this.change.bindenonChange?Si está utilizando select como en línea con otro componente, también puede usar como se indica a continuación.
Y en el componente donde se usa select, defina la función para manejar onChange como se muestra a continuación:
fuente
fuente