You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Router点击登出跳转/[object%20Object]而非/login问题咨询

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

内容的提问来源于stack exchange,提问作者Nazar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 23:39:03