【问题标题】:React setstate return undefined on componentDidMount()在 componentDidMount() 上反应 setstate 返回 undefined
【发布时间】:2019-03-07 08:16:29
【问题描述】:

当我在组件中使用 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
        });}

【问题讨论】:

  • console.log(user) 在 if 条件下返回什么?
  • 你的 console.log 在哪里?

标签: javascript reactjs firebase


【解决方案1】:

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

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

您可以为 setState 提供一个函数或语句,该函数或语句仅在 setState 完成后才被调用......

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

或者干脆……

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

【讨论】:

  • @Sneha Bharti,感谢您指出我原始答案中的错别字。只能怪没起床。
  • 我想在我的 firebase 中使用来自 state 的用户 rebase this.ref = base.syncState(${this.state.user}/fav, { context: this, state: 'fav', asArray: true });} 但它里面未定义。
  • 到目前为止,您是否可以通过回调看到状态更新?如果是这样,您上面的评论可能是一个单独的问题。
猜你喜欢
  • 1970-01-01
  • 2016-08-01
  • 1970-01-01
  • 2016-05-13
  • 2021-01-29
  • 1970-01-01
  • 1970-01-01
  • 2018-04-19
  • 1970-01-01
相关资源
最近更新 更多