在componentDidMount()

时间:2019-03-07 08:16:30

标签: javascript reactjs firebase

当我在组件内部进行console.log()时,removeListener内的

setState用户属性返回未定义,但是当我从firebase中检查反应开发人员工具用户对象中的状态时,它具有我想要的实际值

    state = {
        coinList: {},
        fav: [],
        currentFavourite: '',
        prices: [],
        authed: false,
        user: null
    };

    componentDidMount = () => {
        this.removeListener = firebase.auth().onAuthStateChanged((user) => {
            if (user) {
                this.setState({
                    authed: true,
                    user
                });
            } else {
                this.setState({
                    authed: false
                });
            }
        });

        this.ref = base.syncState('fav', {
            context: this,
            state: 'fav',
            asArray: true
        });}

1 个答案:

答案 0 :(得分:2)

如果您的console.log语句位于removeListener内,则我怀疑在调用console.log时状态尚未更新。

setState是异步的,因此在执行下一条语句时已在后台对其进行了更新。

您可以为setState提供仅在setState完成后才调用的函数或语句。...

this.setState({ user }, this.someFunction())

或者简单地...

this.setState({ user }, console.log(this.state.user));