Javascript 为什么更新的状态没有登录控制台

Javascript 为什么更新的状态没有登录控制台,javascript,reactjs,Javascript,Reactjs,我正在尝试在setState之后记录状态的更新值。但它们并没有更新。谁能告诉我为什么?更新后的状态值可以在render函数中看到,但不能在tokenAccess()方法中看到 import React,{Component}来自'React'; 类登录扩展组件{ 建造师(道具){ 超级(道具); this.authUrl=this.authUrl.bind(this); this.tokenAccess=this.tokenAccess.bind(this); 此.state={ 访问\u令牌:

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

import React,{Component}来自'React';
类登录扩展组件{
建造师(道具){
超级(道具);
this.authUrl=this.authUrl.bind(this);
this.tokenAccess=this.tokenAccess.bind(this);
此.state={
访问\u令牌:“”,
令牌类型:“”,
在“”中过期\u
}
}
令牌访问(){
const hash=window.location.hash.substring(1);
const hashArr=hash.split(/[=&]/);
console.log(hashArr);
这是我的国家({
访问令牌:hashArr[1],
令牌类型:hashArr[3],
expires_in:hashArr[5],
})
console.log(this.state);
}
componentDidMount(){
这个.tokenAccess();
}
render(){
返回(
{
this.state.access\u令牌
}
)
}
}
导出默认登录;

您需要使用
回调
,这样更改
设置状态

  this.setState({yourdata:"newdata"},
   ()=>console.log(this.state.yourdata))
如果您的状态仍然为空,那么您的
hashArr
可能有问题,您应该检查它


希望您能理解这个想法,并且它对您有效

setState
是一种异步方法,这意味着效果不是即时的。这就是为什么您应该将要执行的代码作为第二个参数(回调)传递的原因:
setState(updater[,callback])
()

tokenAccess(){
const hash=window.location.hash.substring(1);
const hashArr=hash.split(/[=&]/);
console.log(hashArr);
这是我的国家({
访问令牌:hashArr[1],
令牌类型:hashArr[3],
expires_in:hashArr[5],
},()=>{//这是
console.log(this.state);//回调为
})//第二个参数
}

可能重复的ugh,应该是可能重复的setState是异步的,需要一些时间来改变状态。因此它可能不会立即可用。几乎
this.setState({yourdata:“newdata”},()=>console.log(this.state.yourdata))
  this.setState({yourdata:"newdata"},
   ()=>console.log(this.state.yourdata))