Jak uzyskać wybraną wartość z rozwijanego menu w ReactJS
Używam Reacta i chcę uzyskać wartość wybranej opcji listy rozwijanej w reaccie, ale nie wiem jak. Jakieś sugestie? dzięki! Moja lista rozwijana to po prostu select like:
<select id = "dropdown">
<option value="N/A">N/A</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
</select>
3 answers
Kod w metodzie render
reprezentuje komponent w danym momencie.
Jeśli wykonasz coś takiego , użytkownik nie będzie mógł dokonywać selekcji za pomocą kontrolki formularza:
<select value="Radish">
<option value="Orange">Orange</option>
<option value="Radish">Radish</option>
<option value="Cherry">Cherry</option>
</select>
Istnieją więc dwa rozwiązania do pracy ze sterownikami formularzy:
-
Komponenty kontrolowane użyj komponentu
state
, aby odzwierciedlić wybory użytkownika. Zapewnia to największą kontrolę, ponieważ wszelkie zmiany wprowadzone wstate
będą odzwierciedlone w renderowaniu komponentu:
Przykład:
var FruitSelector = React.createClass({
getInitialState:function(){
return {selectValue:'Radish'};
},
handleChange:function(e){
this.setState({selectValue:e.target.value});
},
render: function() {
var message='You selected '+this.state.selectValue;
return (
<div>
<select
value={this.state.selectValue}
onChange={this.handleChange}
>
<option value="Orange">Orange</option>
<option value="Radish">Radish</option>
<option value="Cherry">Cherry</option>
</select>
<p>{message}</p>
</div>
);
}
});
React.render(<FruitSelector name="World" />, document.body);
JSFiddle: http://jsfiddle.net/xe5ypghv/
-
Niekontrolowane Komponenty inną opcją jest nie kontrolowanie wartości i po prostu reagowanie na zdarzenia
onChange
. W tym przypadku możesz użyć właściwościdefaultValue
, aby ustawić wartość początkową.<div> <select defaultValue={this.state.selectValue} onChange={this.handleChange} > <option value="Orange">Orange</option> <option value="Radish">Radish</option> <option value="Cherry">Cherry</option> </select> <p>{message}</p> </div>
Http://jsfiddle.net/kb3gN/10396/
Dokumenty do tego są świetne: http://facebook.github.io/react/docs/forms.html a także pokaż, jak pracować z wieloma selekcjami.
UPDATE
Wariantem opcji 1 (używając kontrolowanego komponentu) jest użycie Redux i React-Redux do utworzenia komponentu kontenera. Dotyczy to Funkcji connect
i mapStateToProps
, która jest łatwiejsza niż się wydaje, ale prawdopodobnie przesada, jeśli dopiero zaczynasz.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-09 15:31:46
Zaimplementuj listę rozwijaną jako
<select id = "dropdown" ref = {(input)=> this.menu = input}>
<option value="N/A">N/A</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
</select>
Teraz, Aby uzyskać wartość wybranej opcji z rozwijanego menu wystarczy użyć:
let res = this.menu.value;
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-07 19:50:51
Wystarczy użyć onChange zdarzenia <select>
obiektu.
Wybrana wartość jest w e.target.value
wtedy.
Przy okazji, używanie id="..."
jest złą praktyką. Lepiej używać ref=">.."
http://facebook.github.io/react/docs/more-about-refs.html
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-17 21:10:34