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

React Router Dom v6.17.0中redirect重定向失效问题求助

React Router v6.17.0中redirect不生效的解决方案

你当前的代码问题在于:redirect()函数不能在普通函数中直接调用生效,它是React Router为路由loader/action函数设计的API,只有当这个函数的返回值被路由系统接收时,才会触发重定向。

下面给你两种可行的解决方式:

方案一:使用路由Loader做权限校验(官方推荐)

将权限校验逻辑放到路由的loader函数中,路由加载时会自动处理重定向:

import { createBrowserRouter, RouterProvider, redirect } from "react-router-dom";
import LoginPage from "./LoginPage";
import ProtectedPage from "./ProtectedPage";

const router = createBrowserRouter([
  {
    path: "/login",
    element: <LoginPage />,
  },
  {
    path: "/protected", // 需要保护的路由
    element: <ProtectedPage />,
    loader: () => {
      const isLoggedIn = localStorage.getItem("isLoggedIn");
      if (!isLoggedIn) {
        // 携带提示参数重定向到登录页
        return redirect("/login?message=Please login first");
      }
      return null;
    },
  },
]);

function App() {
  return <RouterProvider router={router} />;
}

方案二:封装组件级权限校验

如果需要在组件层面控制权限,可以写一个ProtectedRoute组件,用<Navigate>实现重定向:

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

export function ProtectedRoute({ children }) {
  const isLoggedIn = localStorage.getItem("isLoggedIn");

  if (!isLoggedIn) {
    return <Navigate to="/login?message=Please login first" replace />;
  }

  return children;
}

然后在路由配置中使用这个组件包裹需要保护的页面:

// 路由配置示例
<Route path="/protected" element={
  <ProtectedRoute>
    <ProtectedPage />
  </ProtectedRoute>
} />

为什么原代码不生效?

redirect()本质是创建了一个重定向指令对象,但这个对象必须被React Router的路由系统(比如loader/action的返回值)处理才能触发页面跳转。你在普通函数里调用它却没有把结果返回给路由系统,所以不会有任何效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 23:54:52