2016-11-03 13 views
0

私はmakeとapiを呼び出してデータを取得する次の関数を用意しました。Fetch APIを使用して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)}) 
} 

これは私のユーザーオブジェクトです。

class User{ 
    constructor(uid, givenName, familyName){ 

    this.uid = yguid; 
    this.givenName = givenName; 
    this.familyName = familyName; 
    } 
} 
export default User; 

私のリアクションコンポーネントで、私はUserオブジェクトをインスタンス化しようとしています。

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 
    } 

Reactコンポーネントには次のインポートステートメントがあります。

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

私のユーザと関数getUserDataはどちらも未定義です。私は間違って何をしていますか、それをどうやって修正しますか?前もって感謝します。

+0

url paramはどこから来たのですか?そしてあなたは破壊によってあなたの関数をインポートしようとしましたか? '../ api/util 'から' import {getUserData}'; '? –

答えて

0

あなたのコードuser = getUserData(url)は、ユーザーをフェッチする予定です。そこにリゾルバも設定する必要があります。私はそれを書くだろう

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

これは、設定状態がthen()の内側になければならないのに役立ちますが、好奇心が強いだけです。 –

+1

はい、getUserDataは非同期関数なので、javascriptはそれを実行し、プロミスが解決される前に直ちに次のものに行き、その結果が返されてユーザーが未定義になることを意味します。あなたが状態に関連するajax呼び出しを扱っているときはいつでも、あなたはsetStateを.then以内にする必要があります。そうでなければあなたは未定義になります。 – finalfreq

関連する問題