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

React Router如何实现页面重定向?未登录访问个人页跳转首页

问题结论

你当前的写法不正确。
React Router v6版本中,<Route>组件必须通过element属性接收路由对应的渲染内容,你写的代码没有指定element属性,直接把渲染逻辑作为无标识属性传入,路由无法正常解析渲染。

正确实现方式

1. 最简行内写法

直接补全element属性即可实现基础重定向逻辑:

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

注意:<Navigate>组件必须加replace属性,该配置会替换当前浏览器历史栈记录,避免用户点击返回按钮时再次跳转到/profile触发循环重定向。

2. 可复用的路由鉴权封装(推荐)

如果项目里有多个需要登录校验的路由,重复写三目判断维护成本高,可以封装通用的鉴权路由组件:

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

// 受保护路由包装组件
function RequireAuth({ children, isLogin }) {
  if (!isLogin) {
    // 未登录重定向到首页
    return <Navigate replace to="/" />;
  }
  // 已登录放行,渲染目标页面
  return children;
}

路由配置时直接复用该组件即可:

<Route
  path="/profile"
  element={
    <RequireAuth isLogin={login}>
      <Profile />
    </RequireAuth>
  }
/>
// 其他需要鉴权的路由都可以套这个组件,比如订单页、个人设置页等

旧版本适配(React Router v5)

如果你的项目用的是v5及更早版本,没有element属性和Navigate组件,需要用render属性搭配Redirect组件实现:

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

<Route
  path="/profile"
  render={() => login ? <Profile /> : <Redirect to="/" />}
/>
避坑提示

不要在组件顶层直接调用useNavigate钩子做同步跳转,这种写法很容易触发React渲染循环,优先用上面提到的声明式组件写法实现重定向,稳定性更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 12:54:18