首页 > web前端 > js教程 > 如何在 React Router v6 中从特定路由中排除 NavBar 和 SideBar?

如何在 React Router v6 中从特定路由中排除 NavBar 和 SideBar?

DDD
发布: 2024-12-23 21:49:17
原创
957 人浏览过

How to Exclude NavBar and SideBar from Specific Routes in React Router v6?

在 React Router v6 中渲染具有不同布局的组件

React Router v6 使您能够渲染具有不同布局和元素的组件。让我们解决您面临的具体挑战:从特定路由(即登录页面(LoginPage))中排除导航栏(NavBar)和侧边栏(SideBar)。

默认情况下,React Router 在相同的布局,包括 NavBar 和 SideBar 等组件。要覆盖此行为,请引入一个单独的布局组件,该组件包含所需的元素并为嵌套路由提供出口。

使用嵌套路由

创建一个布局组件 AppLayout,它封装了 NavBar 和 SideBar .

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

const AppLayout = () => (
  <>
    <NavBar />
    <SideBar />
    <main className={styles["main--container"]}>
      <div className={styles["main--content"]}>
        <Outlet /> {/* Outlet for nested routes */}
      </div>
    </main>
  </>
);
登录后复制

修改您的应用程序组件以使用此组件布局:

const App = () => {
  return (
    <>
      <Routes>
        <Route path="/login" element={<LoginPage />} />
        <Route element={<AppLayout />}>
          <Route path="/" element={<Dashboard />} /> {/* Nested route */}
        </Route>
      </Routes>
    </>
  );
};
登录后复制

此方法渲染不带导航栏和侧栏的 LoginPage,并将它们包含在 AppLayout 中嵌套的 Dashboard 路由中。

使用路由配置和 useRoutes Hook

另一种选择方法是定义一个路由配置对象并利用 useRoutes 钩子。具体方法如下:

const routesConfig = [
  {
    path: "/login",
    element: <LoginPage />,
  },
  {
    element: <AppLayout />,
    children: [
      {
        path: "/",
        element: <Dashboard />,
      },
    ],
  },
];
登录后复制
登录后复制
import { useRoutes } from 'react-router-dom';

const App = () => {
  const routes = useRoutes(routesConfig);

  return routes;
};
登录后复制

此方法根据路由配置动态渲染路由。

使用路由配置和数据路由器(v6.4.0 中引入)

使用 React Router v6.4.0,您可以使用数据路由器来实现相同的效果结果:

const routesConfig = [
  {
    path: "/login",
    element: <LoginPage />,
  },
  {
    element: <AppLayout />,
    children: [
      {
        path: "/",
        element: <Dashboard />,
      },
    ],
  },
];
登录后复制
登录后复制
import { createBrowserRouter, RouterProvider } from 'react-router-dom';

const router = createBrowserRouter(routesConfig);

const App = () => {
  return <RouterProvider router={router} />;
};
登录后复制

此方法涉及创建 createBrowserRouter 实例并使用 RouterProvider 渲染路由。

以上是如何在 React Router v6 中从特定路由中排除 NavBar 和 SideBar?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板