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 change
funció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 value
atributo. React / JSX simplemente replica la conocida sintaxis HTML, no introduce atributos personalizados (con la excepción de key
y 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:
value
sea el mismo que el texto interno?event.target.textContent
event.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.bind
enonChange
?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