React setState没有使用firebase数据库中的值更新状态

时间:2018-06-10 14:15:03

标签: reactjs firebase-realtime-database

我试图从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);
}

1 个答案:

答案 0 :(得分:0)

正如@Dan Abramov所说,你的州将以异步方式填充。在checkAdmin()中完成setState()之前,您对状态的检查(console.log(this.state.isAdmin))将打印到控制台。您的州可能正在更新,但有时会在您打印之后。

查看异步呈现文档:https://reactjs.org/blog/2018/03/27/update-on-async-rendering.html