L'événement de modification est déclenché sur l' <select>
élément, pas sur l' <option>
élément. Cependant, ce n'est pas le seul problème. La manière dont vous avez défini la change
fonction n'entraînera pas de réexécution du composant. Il semble que vous n'ayez pas encore pleinement compris le concept de React, alors peut-être que "Penser en React" vous aidera.
Vous devez stocker la valeur sélectionnée comme état et mettre à jour l'état lorsque la valeur change. La mise à jour de l'état déclenchera un nouveau rendu du composant.
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);
Notez également que les <p>
éléments n'ont pas d' value
attribut. React / JSX réplique simplement la syntaxe HTML bien connue, il n'introduit pas d'attributs personnalisés (à l'exception de key
et ref
). Si vous voulez que la valeur sélectionnée soit le contenu de l' <p>
élément, insérez-la simplement à l'intérieur, comme vous le feriez avec n'importe quel contenu statique.
En savoir plus sur la gestion des événements, les contrôles d'état et de formulaire:
value
soit identique au texte intérieur?event.target.textContent
event.target.slectedOptions[0].label
.la source
Crochets de réaction (16.8+):
la source
Merci Felix Kling, mais sa réponse a besoin d'un petit changement:
la source
this.change.bind
enonChange
?Si vous utilisez select comme en ligne avec un autre composant, vous pouvez également utiliser comme indiqué ci-dessous.
Et sur le composant où select est utilisé, définissez la fonction à gérer onChange comme ci-dessous:
la source
la source