2016-11-20 65 views
0

這是React組件的render()方法中的承諾。如何從React/Firebase中的承諾中獲取數據?

firebaseRef.child("users/" + auth.uid).once('value').then((snapshot) => { 
    let userName = snapshot.val().name; 
}); 

我想snapshot.val的數據()。名稱,並把它在

return(
    <h1>{userName}</h1> 
) 

我能得到的數據出來的承諾與行動派遣了Redux店然後在需要它的地方找回它,但是我想應該有一個更短的實現方法?我嘗試了不同的方式來這樣做,但由於異步性,我失敗了......所以請幫助!

回答

0

我要給予好評以前的評論,但他沒有提到,這樣做的渲染方法的內部是一個餿主意。這會造成無限循環。渲染 - >承諾解析 - >設置狀態 - >渲染 - >重複。你應該這樣做你的firebase承諾:

class Test extends React.Component{ 
    constructor() { 
    super() 
    this.state = {} 
    } 

    componentDidMount() { 
    let { auth } = this.props //or wherever it comes from 

    firebaseRef.child("users/" + auth.uid).once('value').then((snapshot) => { 
     this.setState({ userName: snapshot.val().name }); 
    }); 
    } 

    render() { 
    let { userName } = this.state 
    return (
     <h1>{userName}</h1> 
    ) 
    } 
} 
1

我沒有做過作出反應一段時間,但我認爲這是:

firebaseRef.child("users/" + auth.uid).once('value').then((snapshot) => { 
    let userName = snapshot.val().name; 
    this.setState({ userName: userName }); 
});