javascript - 在 axios 发布后使用 React 钩子设置状态
问题描述
我试图弄清楚如何在 axois 发布请求后使用反应钩子设置我的用户状态。努力寻找一个好的解决方案。我已经阅读了 react hooks 文档,并且我发现的几乎所有示例都只是在页面加载时。我想在用户登录时在表单提交上设置状态。
登录.js
const handleLogin = (evt) => {
//Prevent default form submission
evt.preventDefault();
const loginDetails = {
username: username,
password: password,
}
//send login request to api
axios.post('http://localhost:5000/users/login', loginDetails)
.then((res) => {
setUser(loginDetails.username);
history.push('/');
})
.catch((err) => {
console.log('incorrect password/user');
history.push('/login');
})
}
由于异步行为,在重定向之前未设置状态。我也尝试将重定向放在 useEffect 中,但它会不断重新加载页面,即使我过去依赖项也是如此。如何确保我的状态正在设置,在history.push('/')
生效之前作为道具传递到我的导航栏组件中。
编辑
应用程序.js
return (
<Router history={history} >
<div className={styles.app}>
<Navbar user={user}/>
<Switch>
<Route exact path="/" component={Home}/>
<Route path="/about" component={About}/>
<Route exact path="/blog" component={Blog}/>
<Route exact path="/blog/create" component={CreateBlog}/>
<Route exact path="/blog/:id" component={ViewBlog}/>
<Route path="/demo" component={Demo}/>
<Route path='/resume' component={Resume}/>
<Route
exact path="/login"
render={(props) => (
<Login loginHandler={handleLogin}
usernameHandler={onChangeUsername}
passwordHandler={onChangePassword}/>)}
/>
<Route exact path="/register" render={(props) => (
<Register usernameHandler={onChangeUsername}
passwordHandler={onChangePassword}
handleRegister={handleRegister}/>
)}/>
</Switch>
<Footer/>
</div>
</Router>
);
}
export default App;
解决方案
推荐阅读
- c++ - 简单网格移动练习中的 switch 语句默认值
- java - 如何修复循环以使代码不会在最后一个数字后面打印“+”
- javascript - 在 WP Rest API 中获取基于 WooCommerce 产品 URL 的 features_image
- python - 关于 Flask + Multiprocessing + Tensorflow 的问题
- ruby-on-rails - FactoryBot create_list 重复记录 - 唯一性验证失败
- php - 如何在php中一一循环遍历数组
- java - 在 Spring Boot 中,如何使用扩展的 setter 和 getter 设置(扩展的)属性?
- python - sort(),sorted 在哪里放排序?
- amazon-web-services - 在一次通话中向 SNS 发送多条消息
- macos - 使用 mpifort 编译会产生错误:“我不理解 'm' 标志!”