Javascript this.setState无法从res.data传递信息

Javascript this.setState无法从res.data传递信息,javascript,reactjs,Javascript,Reactjs,当我像这样运行代码时,控制台显示一个空数组。但是,当我使用console.log(res.data)时,我可以毫无问题地获得employees的预期json对象 状态={ 用户列表:[], 名字:“, 姓氏:“, 职位:“” }; loadUsers=()=>{ API.getUsers() 。然后(res=> this.setState({userList:res.data,firstName:,lastName:, 职位:“}) ) .then(console.log(this.state

当我像这样运行代码时,控制台显示一个空数组。但是,当我使用console.log(res.data)时,我可以毫无问题地获得employees的预期json对象

状态={
用户列表:[],
名字:“,
姓氏:“,
职位:“”
};
loadUsers=()=>{
API.getUsers()
。然后(res=>
this.setState({userList:res.data,firstName:,lastName:,
职位:“})
)
.then(console.log(this.state.userList))
.catch(err=>console.log(err));

};
设置状态
是非同步的,因此不能保证在使用控制台检查状态值时更新状态值。log

异步/等待救援

state = {
  userList: [],
  firstName: "",
  lastName: "",
  position: ""
};

loadUsers = async () => {
  const response = await API.getUsers();
  this.setState({
    ...state,
    userList: response.data, 
  }, () => console.log('[user list]', this.state.userList)
};
更新

添加了扩展语法

     .then (console.log(this.state.userList))
它立即调用console.log,记录当前状态(甚至在异步启动之前),console.log返回未定义,整个过程的计算结果为

 .then(undefined)
相反,将函数传递给
。然后
,例如

.then(() => {
  console.log(this.state);
});
但是,由于setState也是异步的,因此无法可靠地工作。因此,您应该使用可以传递给setState的回调,以便在异步操作完成并更新状态后进行日志记录:

this.setState(
  { userList: res.data, firstName: "", lastName: "", position: "" },
  () => console.log("done", this.state)
)

res.data是字符串还是对象-do console.log(type of res.data)
。然后(console.log(this.state.userList))
应该是
。然后(()=>console.log(this.state.userList))
。但是,请注意,
setState
不会立即更新状态。