2016-11-20 66 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 }); 
});