我正在尝试在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;
答案 0 :(得分:1)
您需要使用callback
,像这样更改setstate
this.setState({yourdata:"newdata"},
()=>console.log(this.state.yourdata))
如果您的状态仍然为空,那么您的hashArr
可能有问题,您应该检查一下
希望您能想到这个想法,并且对您有用
答案 1 :(得分:0)
GameScene
是一种异步方法,这意味着效果不是立竿见影的。这就是为什么您应该在第二个参数(回调)之后传递要执行的代码:setState
(source)。
setState(updater[, callback])