2017-03-06 18 views
1

現在、反応ネイティブのfirebaseデータベースからユーザ名を返そうとしています。 console.logは関数内で動作しますが、関数の外部には何も記録しません。私はどこが間違っているのか分かりません。ここに私のコードです。firebaseからユーザ名を取得できません

componentWillMount() { 
    firebase.database().ref('/users/' + this.userId + '/username').once('value').then(function(snapshot) { 
    this.username = snapshot.val(); 
    console.log(this.username) 
    }); 
    console.log(this.username) 
    this.setState({ 
     username: this.username 
    }) 
    } 
+1

に沿ってコードの仕事をしました(潜在的に多くの)後のコードよりも後で。ここに私の説明を見てください:http://stackoverflow.com/questions/35419303/firebase-use-query-result-outside-function/35419533#35419533 –

答えて

0

JavaScriptの非同期性のためです。コールバック内でsetStateを実行する必要があります。コールバックの実行*内のコード*:ES6の矢印関数に構文を変更するいくつかの理由

firebase.database().ref('/users/' + this.userId + '/username').once('value').then(snapshot => { 
    this.username = snapshot.val(); 
    console.log(this.username); 
    this.setState({ 
     username: this.username 
    }) 
}); 
+0

私はそれを試してみるとエラーで挨拶されます – Patty

+0

未解決の約束拒否 – Patty

+0

あなたはすでに分かっている、コールバックのための矢印機能を使用します。コールバックの中で自動的に 'this'をバインドします。私の答えを更新しました。 – vinayr

0

は、これが期待される動作である関数内this.setStateを追加すると

componentWillMount() { 
    firebase.database().ref('/users/' + this.userId + '/username').once('value').then((snapshot) => { 
    this.username = snapshot.val(); 
    console.log(this.username) 
    this.setState({ 
     username: this.username 
    }) 
    }) 
    } 
関連する問題