为什么更新后的状态未登录到控制台

时间:2019-09-22 12:26:18

标签: javascript reactjs

我正在尝试在setState之后记录状态的更新值。但是它们没有更新。谁能告诉我为什么?状态的更新值可以在渲染函数中看到,但不能在tokenAccess()方法中看到。

import React, { Component } from 'react';

class Login extends Component {
    constructor(props){
        super(props);
        this.authUrl=this.authUrl.bind(this);
        this.tokenAccess=this.tokenAccess.bind(this);
        this.state = {
            access_token:'',
            token_type:'',
            expires_in:''
        }
    }

    tokenAccess(){
        const hash = window.location.hash.substring(1);
        const hashArr = hash.split(/[=&]/);
        console.log(hashArr);
        this.setState({
            access_token: hashArr[1],
            token_type: hashArr[3],
            expires_in: hashArr[5],
        })
        console.log(this.state);
    }

    componentDidMount(){
        this.tokenAccess();
    }

    render() {
        return (
            <div>
                <a href={this.authUrl()}>LOGIN</a>
                <div>
                    {
                        this.state.access_token
                    }

                </div>
            </div>
        )
    }
}

export default Login;

2 个答案:

答案 0 :(得分:1)

您需要使用callback,像这样更改setstate

  this.setState({yourdata:"newdata"},
   ()=>console.log(this.state.yourdata))

如果您的状态仍然为空,那么您的hashArr可能有问题,您应该检查一下

希望您能想到这个想法,并且对您有用

答案 1 :(得分:0)

GameScene是一种异步方法,这意味着效果不是立竿见影的。这就是为什么您应该在第二个参数(回调)之后传递要执行的代码:setStatesource)。

setState(updater[, callback])
相关问题