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 change
funçã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 value
atributo. O React / JSX simplesmente replica a conhecida sintaxe HTML, não introduz atributos personalizados (com exceção de key
e 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:
value
seja o mesmo que o texto interno?event.target.textContent
event.target.slectedOptions[0].label
.fonte
Ganchos de reação (16,8+):
fonte
Obrigado Felix Kling, mas sua resposta precisa de uma pequena mudança:
fonte
this.change.bind
emonChange
?Se você estiver usando select como inline para outro componente, também poderá usar como indicado abaixo.
E no componente em que select é usado, defina a função para lidar com onChange, como abaixo:
fonte
fonte