React Router点击登出跳转/[object%20Object]而非/login问题咨询
问题原因
- 核心问题出在登出逻辑的执行顺序错误,以及可能存在的路由常量定义错误:
- 你当前的登出代码先执行
history.push('/login')跳转,再调用store.logout()修改登录状态。store.logout()会把全局的isAuth从true改为false,触发整个应用组件重渲染,此时路由跳转还未完成,页面仍处于/home受保护路由下,受保护路由检测到isAuth=false会主动触发<Redirect>重定向逻辑。 - 如果你的
LOGIN_ROUTE常量被错误定义为{pathname: '/login'}这类路由对象,而非纯字符串'/login',那么重定向时pathname: LOGIN_ROUTE就会把对象赋值给路径字段,对象被转为字符串后就是[object Object],经过URL编码就变成了你看到的/[object%20Object]。 - 即使
LOGIN_ROUTE定义正确,先跳转再改状态的逻辑也会引发不必要的二次重定向,容易触发路由状态异常。
修复方案
- 调整登出逻辑的执行顺序,先修改登录状态、关闭菜单,最后再执行路由跳转,避免状态更新触发额外的重定向逻辑。
- 检查
LOGIN_ROUTE常量的定义,确保它是纯字符串'/login',不要嵌套成路由对象。 - 修复后的登出按钮代码参考:
<MenuItem onClick={() => { store.logout(); handleMenuClose(); // 直接用常量跳转,避免手写路径拼写错误 history.push(LOGIN_ROUTE); }} > Log out </MenuItem>
内容的提问来源于stack exchange,提问作者Nazar
相关产品推荐
相关产品推荐

