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

React Router Dom v6实现登录态路由重定向的正确方法

React Router Dom v6 实现登录态路由重定向方法

v6 版本已移除 v5 中的 <Redirect /> 组件,统一使用 <Navigate /> 组件处理重定向逻辑,对应你要实现的「已登录用户访问/login自动跳首页」需求,有以下几种实现方式:

直接修改路由配置(最简方案)

你当前的嵌套index路由写法可以直接简化,把登录态判断写到路由的element属性中即可,不需要额外嵌套结构:

import { Route, Navigate } from 'react-router-dom';

<Route 
  path="/login" 
  element={user ? <Navigate to="/" replace /> : <LoginStandard />} 
/>

注意:<Navigate /> 上的replace属性会替换当前历史栈记录,和v5中<Redirect />的默认行为一致,避免用户点击浏览器返回键时重复跳回/login页造成循环,登录重定向场景建议始终加上该属性。

如果你要保留当前的嵌套路由结构,只需要把条件判断移到index子路由的element属性上即可:

<Route path="/login">
  <Route 
    index 
    element={user ? <Navigate to="/" replace /> : <LoginStandard />} 
  />
</Route>

封装通用路由组件(适合多路由复用场景)

如果项目里有多个游客可访问、登录后需要重定向的路由(比如注册页、忘记密码页),可以封装通用的游客路由组件统一处理逻辑,减少重复代码:

// 游客路由组件:仅未登录用户可访问,已登录自动跳首页
const GuestRoute = ({ children }) => {
  // 这里的user可以从全局状态、context中获取,不需要每次手动传入
  if (user) {
    return <Navigate to="/" replace />;
  }
  return children;
};

// 路由中使用
<Route
  path="/login"
  element={
    <GuestRoute>
      <LoginStandard />
    </GuestRoute>
  }
/>

补充说明

如果是组件内部通过逻辑触发的命令式跳转(比如登录接口请求成功后跳首页),不要使用<Navigate />组件,改用v6提供的useNavigate钩子即可:

import { useNavigate } from 'react-router-dom';

const LoginStandard = () => {
  const navigate = useNavigate();
  const handleLogin = async () => {
    // 登录逻辑省略
    navigate('/', { replace: true });
  };

  return (/* 登录页表单内容 */);
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 09:03:03