In einem HTML-Formular habe ich dieses Auswahlmenü. Es ist wie ein Profil, das ein Benutzer später bearbeiten und die Werte ändern kann. Hier ist der FirstComponent
Code, der das Formular Rendering:Aktualisieren Sie den Wert eines Dropdown-Menüs in ReactJS
export const FirstComponent = React.createClass({
handleLanguageCode: function(langValue) {
this.setState({
language: langValue
});
},
renderField() {
return (
<div>
<SelectLanguage onSelectLanguage={this.handleLanguageCode} defValue={getValue()} />
</div>
);
}
)}
Wenn der Benutzer das Formular bearbeiten, getValue()
wird der aktuelle Wert SelectLanguage
Komponente senden. Im Folgenden ist der Code für diese Komponente:
import { DropdownList } from 'react-widgets';
export const SelectLanguage = React.createClass({
getInitialState: function(){
return{
value: '',
};
},
handleLangChange: function (val) {
var name = val.name
//this.props.onSelectLanguage(val.id); //???
//this.props.defValue(name); //???
//this.setState({defValue: name}); //???
//this.state.value = defaultVal //???
},
componentWillMount() {
this.componentWillReceiveProps(this.props);
},
componentWillReceiveProps(props) {
var def = this.props.defValue || 'eng';
this.setState({value:def});
},
render() {
const languages = [{"id": "eng", "name": "english"}, {"id": "swd", "name": "swedish"}] // it's a big json array!!
return (
<div >
<DropdownList
ref='dropdown'
data={languages}
valueField='id'
textField={item => item.name}
caseSensitive={false}
filter={this.filterLanguage}
value={this.state.value}
onChange={this.handleLangChange} />
</div>
);
}
});
Das Problem ist, wenn der Benutzer einen neuen Wert aus dem Dropdown-Menü auswählt, es nicht aktualisiert !! Es zeigt immer noch den vorherigen Wert an. Ich weiß nicht, wie man die handleLangChange
Funktion schreibt, um es zu behandeln. Ich habe mehrere Möglichkeiten ausprobiert, konnte aber das Ergebnis nicht erreichen:/Kann mir jemand helfen, es zu reparieren?
ich Ihre Änderungen nur hinzugefügt. Ich kann sehen, dass jetzt der 'handleLanguageCode' den neuen Wert bekommt (' console.log (langValue); 'druckt den neuen ausgewählten Wert). Aber das Dropdown zeigt die Änderung noch nicht an. Auch ich bekomme diese Warnung: 'Warnung: bind(): Sie binden eine Komponentenmethode an die Komponente. Reagieren erledigt das automatisch für Sie, und Sie können diesen Anruf sicher entfernen. " – Birish
Ich habe diese beiden Zeilen auch zu' handleLangChange' hinzugefügt: 'this.setState ({value: val.name});' and 'this.props.onSelectLanguage (val.id); ' – Birish
@ Vivian: Ich denke, ich brauche nicht wirklich' bind', es tut es anscheinend automatisch! – Birish