Ich versuche, Daten von einer untergeordneten Komponente wie folgt an die übergeordnete Komponente zu senden:
const ParentComponent = React.createClass({
getInitialState() {
return {
language: '',
};
},
handleLanguageCode: function(langValue) {
this.setState({language: langValue});
},
render() {
return (
<div className="col-sm-9" >
<SelectLanguage onSelectLanguage={this.handleLanguage}/>
</div>
);
});
und hier ist die untergeordnete Komponente:
export const SelectLanguage = React.createClass({
getInitialState: function(){
return{
selectedCode: '',
selectedLanguage: '',
};
},
handleLangChange: function (e) {
var lang = this.state.selectedLanguage;
var code = this.state.selectedCode;
this.props.onSelectLanguage({selectedLanguage: lang});
this.props.onSelectLanguage({selectedCode: code});
},
render() {
var json = require("json!../languages.json");
var jsonArray = json.languages;
return (
<div >
<DropdownList ref='dropdown'
data={jsonArray}
value={this.state.selectedLanguage}
caseSensitive={false}
minLength={3}
filter='contains'
onChange={this.handleLangChange} />
</div>
);
}
});
Ich muss den ausgewählten Wert vom Benutzer in der übergeordneten Komponente abrufen. Ich erhalte diesen Fehler:
Uncaught TypeError: this.props.onSelectLanguage is not a function
Kann mir jemand helfen, das Problem zu finden?
PS Die untergeordnete Komponente erstellt ein Dropdown-Menü aus einer JSON-Datei, und ich benötige die Dropdown-Liste, um beide Elemente des JSON-Arrays nebeneinander anzuzeigen (z. B. "aaa, englisch" als erste Wahl!).
{
"languages":[
[
"aaa",
"english"
],
[
"aab",
"swedish"
],
}
<SelectLanguage onSelectLanguage={this.handleLanguage*Code*}/>
ein Tippfehler.handleLanguageCode: function(langValue) { this.setState({ language: langValue }).bind(this); },
Aber es gibt einen Fehler zurück:ncaught TypeError: Cannot read property 'bind' of undefined
createClass
bindet nicht reagierende Methoden automatisch.Antworten:
Das sollte funktionieren. Während Sie die Requisite zurücksenden, senden Sie sie als Objekt, anstatt sie als Wert zu senden, oder verwenden sie alternativ als Objekt in der übergeordneten Komponente. Zweitens müssen Sie Ihr json-Objekt so formatieren, dass es Name-Wert-Paare sowie Verwendung
valueField
undtextField
Attribut von enthältDropdownList
Kurze Antwort
Elternteil:
Kind:
Detailliert:
BEARBEITEN:
Da React.createClass ab Version 16.0 veraltet ist, ist es besser, eine React-Komponente durch Erweitern zu erstellen
React.Component
. Das Übergeben von Daten von der untergeordneten Komponente an die übergeordnete Komponente mit dieser Syntax sieht folgendermaßen ausElternteil
Kind
Verwendung der
createClass
Syntax, die das OP in seiner Antwort Parent verwendet hatKind
JSON:
quelle
this.state.selectedLanguage
scheint immer null zu sein: / Ich benutze DropdownList vonreact-widgets
Uncaught ReferenceError: value is not defined
. Ich habe diese Änderung vorgenommen:onChange={this.handleLangChange.bind(this, this.value)}
und es wird kein Fehler zurückgegeben, aber der ausgewählte Wert wird immer noch nichtÜbergeben von Daten von der untergeordneten Komponente an die übergeordnete Komponente
In der übergeordneten Komponente:
In der untergeordneten Komponente:
quelle
this.getData = this.getData.bind(this);
im Konstruktor, da dies möglicherweise angezeigt wird. SetState ist keine Funktion, wenn Sie den Status in getData bearbeiten möchten.Ich habe den Ansatz gefunden, wie man Daten von untergeordneten Komponenten in Eltern erhält, wenn ich sie brauche.
Elternteil:
Kind:
Dieses Beispiel zeigt, wie die Funktion von der untergeordneten Komponente an die übergeordnete Komponente übergeben und mit dieser Funktion Daten vom untergeordneten Element abgerufen werden.
quelle
Angesichts der Tatsache, dass Komponenten von Reaktionsfunktionen und die Verwendung von Hooks heutzutage immer beliebter werden, werde ich ein einfaches Beispiel für die Übergabe von Daten von einer untergeordneten an eine übergeordnete Komponente geben
In der übergeordneten Funktionskomponente haben wir:
dann
und Übergeben von setChildData (die einen ähnlichen Job wie this.setState in Klassenkomponenten ausführen) an Child
In Child Component erhalten wir zuerst die empfangenden Requisiten
dann können Sie Daten trotzdem wie mit einer Handlerfunktion übergeben
quelle
Die React.createClass-Methode ist in der neuen Version von React veraltet. Sie können dies ganz einfach auf folgende Weise tun: Erstellen Sie eine Funktionskomponente und eine andere Klassenkomponente, um den Status beizubehalten:
Elternteil:
Kind:
quelle
von der untergeordneten Komponente zur übergeordneten Komponente wie unten
übergeordnete Komponente
untergeordnete Komponente
Ich hoffe diese Arbeit
quelle
Sie können sogar vermeiden, dass die übergeordnete Funktion den Status direkt aktualisiert
In der übergeordneten Komponente:
In der untergeordneten Komponente:
quelle
In der
React v16.8+
Funktionskomponente können SieuseState()
einen Funktionsstatus erstellen, mit dem Sie den übergeordneten Status aktualisieren und dann als Requisitenattribut an das untergeordnete Element weitergeben können. In der untergeordneten Komponente können Sie die übergeordnete Statusfunktion auslösen. Das Folgende ist ein funktionierendes Snippet ::quelle
Die Idee ist, einen Rückruf an das Kind zu senden, der aufgerufen wird, um die Daten zurückzugeben
Ein vollständiges und minimales Beispiel mit Funktionen:
Die App erstellt ein untergeordnetes Element, das eine Zufallszahl berechnet und diese direkt an das übergeordnete Element zurücksendet.
console.log
Dies führt zum Ergebnisquelle
Übergeordnete Komponente: -TimeModal
Hinweis : - onSelectPouringTimeDiff = {this.handleTimeValue}
Rufen Sie in der untergeordneten Komponente bei Bedarf Requisiten auf
quelle