2016-11-03 3 views
0

zu erhalten Ich habe die folgende Funktion, die und API ruft und erhält Daten.Nicht möglich, Daten mit Fetch-API in React

export function getUserData(url){ 

    return fetch(url, { credentials : 'include'}) 
       .then((response) => { return response.json()}) 
       .then((data) =>{ return new User(data.uid, data.givenName, data.familyName)}) 
} 

Dies ist mein Benutzerobjekt.

Jetzt in meiner Komponente reagiere ich versuchen, das Benutzerobjekt zu instanziieren.

class Header extends React.Component { 

    constructor(props) { 
     super(props); 
     this.state = { fullName: null, yguid: null }; 

    } 
    componentWillMount(){ 
     user = getUserData(url); 
     console.log(user); 
     //set state with User data 
    } 

Ich habe die folgenden Importanweisungen in meiner React-Komponente.

import User from '../models/user'; 
import '../api/util'; 

Sowohl mein Benutzer als auch meine Funktion getUserData sind nicht definiert. Was mache ich falsch und wie repariere ich es? Danke im Voraus.

+0

Woher kommt der URL param? Und hast du versucht, deine Funktion durch Zerstörung zu importieren? 'import {getUserData} von '../ api/util';'? –

Antwort

0

Ihr Code user = getUserData(url) setzt den Benutzer auf ein Abrufversprechen. Sie müssen dort auch einen Resolver einrichten. Ich würde es schreiben wie

componentWillMount(){ 
let user; 
// getUserData actually returns a promise. resolve with a .then and set user to result 
getUserData(url).then((result) => { 
user = result; 

console.log(user); // user should be defined here 

// not sure if user is a state object or not but if it is set it like this 
this.setState({user: user}) 
}) 
} 
+0

Das hilft, aber nur neugierig, muss der Einstellungszustand innerhalb der then() sein. –

+1

Ja, weil getUserData eine asynchrone Funktion ist, was bedeutet, dass Javascript es ausführt und sofort zur nächsten Sache geht, bevor das Versprechen verrechnet wird und die Ergebnisse zurück sind, was dazu führt, dass der Benutzer undefiniert ist. Immer wenn Sie mit Ajax-Aufrufen zu tun haben, die sich auf den Status beziehen, müssen Sie sicherstellen, dass Sie innerhalb von .then setState angeben, sonst werden Sie undefiniert. – finalfreq

Verwandte Themen