Ich versuche, einen einfachen AJAX-Aufruf mit Axios in React durchzuführen, aber ich kann nicht herausfinden, wo ich falsch liege.Axios AJAX-Aufruf in React, der nur den Anfangszustand zurückgibt
Hier ist, was ich bisher habe (in meiner Komponente):
ComponentDidMount() {
axios.get('https://jsonplaceholder.typicode.com/users')
.then(res => {
const users = res
this.setState({ users });
});
}
render() {
console.log(this.state.users) // returns the **initialised EMPTY array**
return (
<div>
{this.state.users.map(user => <p>{user.name}</p>)} // returns nothing
</div>
)
}
ich an der URL ein einfaches Array am Zugriff auf in der .get()
Methode gegeben (check it out, es ist Struktur, wenn nötig, um zu sehen). Ich kette dann auf die Versprechen und übergeben Sie das res
Argument in einer Pfeilfunktion.
Dann weise ich die users
Variable dem Ergebnis zu und versuche, den Zustand als dies zu setzen. Also an dieser Stelle erwarte ich, dass this.state.users dem resultierenden Array gleich ist.
jedoch ...
A) Wenn ich console.log (this.state.users) versuchen, es gibt die initialisierten leeres Array
B) Wenn ich versuche, eine Karte des machen Array, Iterieren durch die Eigenschaft name
auf jedem Objekt, wieder nichts.
Wohin gehe ich falsch?
Das hat funktioniert - danke. Ich bin ein wenig verwirrt - wenn ich die Ergebnisse "console.log" gebe, werden zwei Werte zurückgegeben: '[]' und das erwartete Array von der API. Dies kann vermutlich dadurch erklärt werden, dass der Zustandswert einmal bei der Initialisierung zurückgegeben wird und dann wieder mit componentDidMount. Wenn ich versuche, auf ein einzelnes Objekt im Array zuzugreifen, zum Beispiel 'this.state.users [0]', versucht es auf das leere Array zuzugreifen. Ich kann nur dazu kommen, indem ich durch das Array mappe. Gibt es eine Möglichkeit, den aktualisierten Wert "this.state.users" jedes Mal zu targeten und zu vermeiden, dass der ursprüngliche Zustandswert abgerufen wird? – Paulos3000
Jedes Mal, wenn Sie this.setState aufrufen, wird die Rendermethode erneut aufgerufen, um den neuen Status der Komponente wiederzugeben. Sehen Sie sich dieses Diagramm hier an: http://imgh.us/react-lifecycle.svg Sie haben also ein initiales Rendering (wenn Benutzer nicht initialisiert sind), dann haben Sie ein zweites nach componentDidMount und ein drittes nachdem Sie setState (at Dieser Punkt haben Sie die Liste der Benutzer). Sie können die Liste in Ihrem Komponentenkonstruktor initialisieren. Normalerweise können Sie in der Render-Methode überprüfen, ob '' 'this.state.users''' leer ist und einen Loader oder etwas anzeigt. –