【发布时间】:2019-02-18 23:20:32
【问题描述】:
我需要将数据从 firestore 传递到我的组件中。但是请求是异步的,所以当我的渲染方法在我从请求中获取数据之前运行时,我遇到了问题。因此,当渲染运行时,pops 值为 Null,因为尚未定义状态。由于某种原因,组件也会渲染两次。 有没有更好的方法来处理异步的东西?
已经尝试过将请求放到更高的位置(index.js)并将数据传递给应用程序。 试图在渲染方法中发出请求。 试图将请求放在异步函数中并在构造函数中调用它以在那里设置状态。与调用异步方法相同。
class App extends Component {
constructor(props) {
super(props);
this.giveUsername = this.giveUsername.bind(this);
const userId = firebase.auth().currentUser.email;
this.giveUsername(userId);
}
async giveUsername(userId){
let username;
await firebase.firestore().collection('users').where('email', '==', userId).get().then((snapshot) =>{
snapshot.docs.forEach(doc =>{
console.log(`doc.data().username - ${doc.data().username}`);
username = doc.data().username;
});
});
this.setState( {
userId : userId,
username : username
});
}
render() {
return (
<div className='App'>
<Header username={this.state.username}/>
<NewTask userId={this.state.userId}/>
<TaskList userId={this.state.userId}/>
</div>
);
}
}
【问题讨论】:
标签: javascript reactjs firebase google-cloud-firestore