我试图从firebase数据库中读取一个值来检查当前登录的用户是否是管理员,但是setState没有更新isAdmin状态。
constructor(props) {
super(props);
this.state = {
isAdmin: false
};
}
checkAdmin = () => {
const self = this;
const memberId = app.auth().currentUser.uid;
const memberRef = database
.ref("members")
.child(memberId)
.child("groups")
.child(this.state.groupid);
memberRef.once("value").then(snapshot => {
self.setState({
isAdmin: snapshot.val().admin
});
});
};
componentDidMount() {
this.checkAdmin();
console.log(this.state.isAdmin);
}
答案 0 :(得分:0)
正如@Dan Abramov所说,你的州将以异步方式填充。在checkAdmin()中完成setState()之前,您对状态的检查(console.log(this.state.isAdmin))将打印到控制台。您的州可能正在更新,但有时会在您打印之后。
查看异步呈现文档:https://reactjs.org/blog/2018/03/27/update-on-async-rendering.html