Ich bin neu im Reagieren und stecke bei einem bestimmten Projekt fest. Die Sache ist, dass ich eine habe api_url in this.props von einer übergeordneten Komponente empfangen. Und in dieser untergeordneten Komponente möchte ich verwenden api_url um einige Daten mit JSON abzurufen.
In der übergeordneten Komponente habe ich:
Repositories api_url={this.state.objs.repos_url}
und in der untergeordneten Komponente möchte ich so etwas wie:
componentDidMount() {
$.getJSON(this.props.api_url, function(json) {
for (var i = 0; i < json.length; i++) {
var each_repo = json[i]
console.log(each_repo["name"]);
}
});
}
also was ich brauche ist das entsprechende api_url im URL-Abschnitt von $.getJSON.
Gibt es eine Zugriffsmöglichkeit this.props in componentDidMount oder gibt es eine andere Möglichkeit, die gleichen Ergebnisse zu erzielen?
Eine andere Sache in diesem Zusammenhang ist, dass ich auch a verwende $.getJSON rufen Sie an ComponentDidMount der übergeordneten Komponente.
Ein Dank im Voraus.
Ich bin mir nicht sicher, ob ich das ganz verstehe … this.props ist in der gesamten Klasse verfügbar. Dein Code ist also in Ordnung.
Ich habe genau das gleiche Problem. Ich habe meine Methode im Konstruktor gebunden, kann aber immer noch nirgendwo auf Requisiten zugreifen, außer in der Methode render()
– bernieslearning
23. Februar 2019 um 23:24 Uhr
Implementieren Sie in Ihrer Klasse den Konstruktor:
Wahrscheinlich ist es bei dieser Reaktionsversion einfacher, es zu bekommen.
Dies gibt mir einen Fehler, aber wenn ich this.props.nameOfProp innerhalb von render aufrufe, funktioniert es.
– Daniel José Padilla Peña
31. August 2017 um 15:23 Uhr
Um auf Requisiten in der untergeordneten Komponente zuzugreifen, müssen Sie einen Konstruktor in der untergeordneten Komponente erstellen und dann Requisiten als Attribut an die Funktion super() übergeben
constructor(props) {
super(props);
this.state = {}
}
componentDidMount(){
$.getJSON(this.props.api_url , function(json) {
for (var i = 0; i < json.length; i++) {
var each_repo = json[i]
console.log(each_repo["name"]);
}
});
}
Sobald Sie dies getan haben, können Sie auf Requisiten in Ihrer gesamten untergeordneten Komponente zugreifen
Ich habe dasselbe bereits versucht und es gibt undefiniert zurück, wenn ich this.props.api_url an der Konsole angemeldet habe
– Nithin krishna
11. November 2016 um 9:11 Uhr
Überprüfen Sie, ob der Wert this.state.objs.repos_url in der übergeordneten Komponente vorhanden ist
– Shubham Khatri
11. November 2016 um 9:43 Uhr
.bind(this) fehlt danach $.getJSONsiehe meine Antwort unten.
– M3RS
19. März 2018 um 15:02 Uhr
Sie haben wahrscheinlich ein Problem mit der this in Ihrem Ajax-Aufruf. Meine Vermutung wäre, dass Sie binden müssen this in Ihren Repositories, sodass die Instanz von this in Ihrem Ajax-Aufruf bezieht sich auf Repositories und nicht auf das Ajax-Objekt.
M3RS
Für diejenigen, die jetzt über diese Seite stolpern, was oben fehlt, ist .bind(this) nach $.getJSON. Andernfalls können Sie nicht zugreifen this innerhalb $.getJSON.
componentDidMount() {
$.getJSON(this.props.api_url, function(json) {
for (var i = 0; i < json.length; i++) {
var each_repo = json[i]
console.log(each_repo["name"]);
}
}).bind(this);
}
Mein Problem ist ähnlich, aber auf diese Weise zu lösen
let self = this
this.props.users.map(function (u, x) {
if (self.props.data[u.name]) {
//Stuff
}
}
Meine if-Anweisung erkannte keine Requisiten, also verwendete ich stattdessen self
Dan Andersson
Hast du versucht hinzuzufügen this.componentDidMount = this.componentDidMount.bind(this); zu deinem Konstrukteur? So erreichen Sie this aus componentDidMount.
10941700cookie-checkZugriff auf this.props in React ComponentDidMountyes
Ich bin mir nicht sicher, ob ich das ganz verstehe … this.props ist in der gesamten Klasse verfügbar. Dein Code ist also in Ordnung.
– Seb Bizeul
11. November 2016 um 8:35 Uhr
Kannst du schon, meinst du drinnen
$.getJSON
?..– Dominik
11. November 2016 um 10:56 Uhr
Dein Code funktioniert – jsbin.com/wirodemulu/edit?html,js,console,output – wenn Sie zugreifen möchten
this
aus der Callback-Funktion in$.getJSON
Sie müssen verwenden.bind()
.– Henrik Andersson
11. November 2016 um 14:28 Uhr
Ich habe genau das gleiche Problem. Ich habe meine Methode im Konstruktor gebunden, kann aber immer noch nirgendwo auf Requisiten zugreifen, außer in der Methode render()
– bernieslearning
23. Februar 2019 um 23:24 Uhr