L'evento di modifica viene attivato sull'elemento <select>
, non sull'elemento <option>
. Tuttavia, questo non è l'unico problema. Il modo in cui è stata definita la funzione change
non causerà un rerender del componente. Sembra che tu non abbia ancora pienamente compreso il concetto di React, quindi forse gli aiuti "Thinking in React".
È necessario memorizzare il valore selezionato come stato e aggiornare lo stato quando il valore cambia. L'aggiornamento dello stato attiverà un rerender 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);
Si noti inoltre che <p>
elementi non hanno un attributo value
. React/JSX replica semplicemente la nota sintassi HTML, non introduce attributi personalizzati (ad eccezione di key
e ref
). Se si desidera che il valore selezionato sia il contenuto dell'elemento <p>
, inserirlo semplicemente all'interno, come si farebbe con qualsiasi contenuto statico.
Per saperne di più sui controlli di gestione degli eventi, statali e forma:
fonte
2015-03-05 00:57:31