[英]React.js render before fetch is done
Okay i have a problem that my app goes into an render before my fetch is done so it renders wrong 好的,我的问题是我的应用程序在提取完成之前进入了渲染状态,因此渲染错误
here is the code 这是代码
componentWillMount() {
fetch('http://localhost:8081/milltime/login?users='+this.state.email, {
})
fetch("http://localhost:8081/milltime/getUsers")
.then(res => res.json())
.then(info => {
this.setInfo(info);
for (var i = 0; i < info['mta:getUsersResponse']['mta:users'].length; i++) {
const user = {
id: info['mta:getUsersResponse']['mta:users'][i]['mta:UserId'],
username: info['mta:getUsersResponse']['mta:users'][i]['mta:UserLogin'],
name: info['mta:getUsersResponse']['mta:users'][i]['mta:FullName']
}
this.addUser(user);
}
}).then(function() {
console.log("signed in to milltimes");
}).catch(function() {
console.log("need to sign in to milltime");
});
}
setInfo(info) {
this.setState({
info: info,
})
}
render() {
if (!this.state.info) {
return (
<MilltimeLogin email={this.state.email}/>
);
}
return(
<div className="usersTable">
<Table striped bordered condensed responsive hover>
<thead>
<tr>
<th/>
<th className="title">Employees</th>
<th/>
</tr>
<tr>
<th>Id</th>
<th>Full Name</th>
<th>Username</th>
</tr>
</thead>
<tbody>
{
Object
.keys(this.state.Users)
.map(key => <User key={key} index={key} details={this.state.Users[key]} onChange={this.props.onChange} />)
}
</tbody>
</Table>
</div>
);
}
}
The problem here is that the second fetch /getUsers need a session key that the first fetch provides to work otherwise it will give an error that its missing session. 这里的问题是,第二次获取/ getUsers需要第一个获取提供的会话密钥才能正常工作,否则它将给出一个错误,即丢失了会话。 And because it for some reason doesnt get this session key it doesnt set info so the render function will go into the if statement and render MilltimeLogin component instead of the rest.
并且由于某种原因它没有获得此会话密钥,因此它没有设置信息,因此render函数将进入if语句并渲染MilltimeLogin组件,而不是其余部分。 Anyone know how to make sure the first fetch is all done so the second one get the session key.
任何人都知道如何确保第一次获取均已完成,以便第二次获取会话密钥。
EDIT if i reload the page one time it works but thats not how i want it 如果我一次重新加载页面,则进行编辑,但这不是我想要的方式
Fetch is asynchronous as you can read here so nothing assure you that the first fetch will be over when your second one is starting. 提取是异步的,您可以在此处阅读,因此没有什么可以确保您的第二次提取开始时第一次提取将结束。
Maybe the await
prefix can help you there (read this for more information) Hope this helps you in your research 也许
await
前缀可以在这里为您提供帮助(有关详细信息,请阅读此内容)希望这对您的研究有所帮助
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.