如果axios api为空或初始状态为空,如何有条件地重定向到页面。在下面的代码中,我使用axios更新状态,用户信息在状态中可用,但代码继续调用http://userapi.com/login
在循环中。我试图实现的是,如果userinfo状态最初为空,则重定向到登录页面并进行身份验证。
class MyComponent extends React.Component {
constructor() {
super()
this.state = {
userinfo:{}
}
}
componentDidMount(){
axios.get('http://userapi.com/user')
.then(res => {
const userinfo = res.data;
this.setState({ userinfo });
})
.catch(err => {
console.log("Fetch error", err)
})
if (Object.keys(this.state.userinfo).length === 0) {
window.location = 'http://userapi.com/login';
}
}
render() {
return (
<React.Fragment>
<Header>Welcome</Header>
</React.Fragment>
)
}
}
我能够重定向罚款,但问题是与连续循环。即使用户信息存储重定向被调用(发生在循环中)
在这里当你得到回应。。。
.then(res => {
const userinfo = res.data;
this.setState({ userinfo });
})
检查res.data的用户信息。如果您确实收到了一个用户,那么您可以setState,如果没有用户重定向到登录页面。
至于重定向,请查看react路由器
或react路由器dom
我不会在React应用程序中使用纯javascript进行重定向/导航。
Axios返回Promise,因此在更新块中状态的函数之前,如果执行下面的
条件,则执行带有
的代码。因此,如果您需要在请求成功后检查更新的状态值,请将您的条件放入
然后
块中。
componentDidMount() {
axios
.get('http://userapi.com/user')
.then((res) => {
const userinfo = res.data;
this.setState({ userinfo }, () => {
if (Object.keys(this.state.userinfo).length === 0) {
window.location = 'http://userapi.com/login';
}
});
})
.catch((err) => {
console.log('Fetch error', err);
});
}
您可以尝试以下方法:
class HeaderComponent extends React.Component {
constructor() {
super()
this.state = {
userinfo:{}
}
}
componentDidMount(){
axios.get('http://userapi.com/user')
.then(res => {
const userinfo = res.data;
this.setState({ userinfo });
})
.catch(err => {
console.log("Fetch error", err)
})
}
componentDidUpdate(prevProps, { userinfo }) {
if (userinfo !== this.state.userinfo
&& Object.keys(this.state.userinfo.w3idUser || {}).length === 0) {
window.location = 'http://userapi.com/login';
}
}
render() {
return (
<React.Fragment>
<Header>Welcome</Header>
</React.Fragment>
)
}
}
问题是,this.state.w3idUser
从不存在,因为您正在将响应映射到userInfo
状态。
我正在用Express开发一个具有聊天功能的多页面web应用程序(由socket.io提供)。用户可以邀请其他人到私人共享聊天室(该聊天室还有其他组件,如共享画板)。我想在完成邀请事务后将两个用户(邀请者和被邀请者)重定向到不同的URL。 因为socket.io不能访问路由的请求和响应对象,所以我尝试将socket.io实例传递到路由处理中。除了重复事件处理程序堆积在页面刷新上的问题之外,Expr
我正在努力使一个向上投票和向下投票的功能在我的网站。然而,有一个我不喜欢的特殊行为,那就是每当用户点击按钮时,他不应该被重定向到另一个页面,而应该保持在同一页面上。 点击upvote按钮后,会转到url,这是我不想要的。我希望它保持在同一页面上,即 models.py views.py urls.py 查看-supplier.html
我想在成功登录后为特定页面重定向用户。 我不希望用户在登录后导航到上次查看的页面。 我试过以下网址,但它显示我的错误。 错误:
我想在成功登录后重定向到主页。我找遍了,但没有找到解决办法。提前感谢
我有一个两步验证表单,这意味着第一个用户输入得到验证(在ValidatecKetData控制器中),如果一切正常,您可以进入下一个表单页面,我可以通过 问题:在第二页,用户需要上传一个文件,如果他不这样做,验证失败。 如果是这种情况,验证器类立即重定向,因为它是后路由,所以不起作用。 所以我创建了一个这样的获取路线: 并将其放入-方法: 我把它放到了-method中,因为如果用户不在第二页附加文件