当前位置:首页 > React

react如何拦截路由

2026-03-31 05:58:41React

拦截路由的方法

在React中拦截路由通常用于实现权限控制、数据预加载或路由跳转前的确认操作。以下是几种常见的方法:

使用React Router的导航守卫

React Router v6提供了useNavigateuseBeforeUnload等钩子来实现路由拦截:

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

function PrivateRoute({ children }) {
  const navigate = useNavigate();
  const location = useLocation();
  const isAuthenticated = checkAuth(); // 自定义认证逻辑

  if (!isAuthenticated) {
    navigate('/login', { state: { from: location } });
    return null;
  }

  return children;
}

自定义高阶组件

react如何拦截路由

创建高阶组件包装需要保护的路由:

function withAuth(Component) {
  return function WrappedComponent(props) {
    const isAuth = /* 认证逻辑 */;

    if (!isAuth) {
      return <Navigate to="/login" />;
    }

    return <Component {...props} />;
  };
}

// 使用方式
const ProtectedPage = withAuth(PageComponent);

路由配置拦截

react如何拦截路由

在路由配置中直接添加拦截逻辑:

<Routes>
  <Route 
    path="/dashboard" 
    element={
      <RequireAuth>
        <Dashboard />
      </RequireAuth>
    } 
  />
</Routes>

路由跳转确认

实现离开页面前的确认提示:

import { unstable_useBlocker as useBlocker } from 'react-router-dom';

function EditPage() {
  const [isDirty, setIsDirty] = useState(false);

  useBlocker(
    ({ nextLocation }) => isDirty && 
    !window.confirm('确定要离开吗?未保存的更改将会丢失')
  );

  // 表单修改时设置isDirty为true
}

数据预加载拦截

在路由跳转前预加载数据:

const router = createBrowserRouter([
  {
    path: '/',
    element: <Layout />,
    children: [
      {
        path: 'teams/:teamId',
        element: <Team />,
        loader: async ({ params }) => {
          return fetchTeam(params.teamId); // 数据加载完成前会阻塞导航
        }
      }
    ]
  }
]);

每种方法适用于不同场景,可根据具体需求选择实现方式。React Router v6推荐使用loader和action来处理数据相关拦截,使用组件组合方式处理UI层拦截。

标签: 路由react
分享给朋友:

相关文章

vue实现路由

vue实现路由

Vue 路由的实现方法 Vue 中实现路由通常使用 Vue Router 库。以下是具体的实现步骤: 安装 Vue Router 在项目中通过 npm 或 yarn 安装 Vue Router:…

如何运行react

如何运行react

运行 React 项目的步骤 安装 Node.js 和 npm 确保系统已安装 Node.js(包含 npm)。可通过官网 Node.js 下载并安装最新稳定版本。安装完成后,验证版本: node…

react如何刷新

react如何刷新

刷新React组件的方法 使用状态更新触发重新渲染 通过更新组件的状态可以触发重新渲染。React会在状态变化时自动重新渲染组件。 const [count, setCount] = useStat…

react如何清理

react如何清理

清理 React 项目的方法 清理未使用的依赖项 运行 npm prune 或 yarn install --production 可以移除 node_modules 中未在 package.json…

react如何发布

react如何发布

发布React应用的步骤 构建生产版本 使用以下命令生成优化后的生产版本代码,代码会被压缩并移除开发环境中的调试工具: npm run build 构建完成后会生成build文件夹,包含所有静态资源…

如何关闭react

如何关闭react

关闭React应用的步骤 在开发或运行React应用时,可能需要关闭正在运行的开发服务器或停止应用。以下是几种常见情况的处理方法: 停止开发服务器 如果正在使用npm start或yarn star…