React 6.4.0 所有路由器的通用标头
P粉864872812
P粉864872812 2023-08-25 17:19:53
[React讨论组]

我正在使用 react-router-dom 版本 6.4.0 启动 React 项目,但无法为所有路由创建通用标头。

App.js - 这是我添加 RouterProvider

的文件
import logo from './logo.svg';
import './App.css';
import { Link, Outlet, RouterProvider } from "react-router-dom";
import { routers } from "./routes/routes";

function App() {
  return (
    <RouterProvider router={routers}>
      <div>Header</div>
      <Outlet />
    </RouterProvider>
  );
}

export default App;

routes.js - 在此文件中我将创建所有路线

import { createBrowserRouter, redirect } from "react-router-dom";
import About from "../pages/About/About";
import Home from "../pages/Home/Home";
import { getUser, isAuthenticated } from "../sso/authUtil";

const authLoader = () => {
  if (!isAuthenticated()) {
    return redirect("https://google.com");
  } else {
    return getUser();
  }
};

export const routers = createBrowserRouter([
  {
    path: "/",
    element: <Home />,
    loader: authLoader,
  },
  {
    path: "/about",
    element: <About />,
  },
]);

Home.js - 此文件是主页,其中包含指向其他页面的链接以及标题

import React from "react";
import { Link, Outlet, useLoaderData } from "react-router-dom";

const Home = () => {
  const loaderData = useLoaderData();

  return (
    <>
      <div>Header</div>
      <Link to="/">Home</Link>
      <Link to="/about">About</Link>
      <div>Home: {loaderData}</div>{" "}
      <Outlet />
    </>
  );
}
 
export default Home;

About.js - 这是一个普通的组件,表示关于

import React from "react";

const About = () => {
  return <div>About</div>;
};

export default About;

我希望 HomeAbout 组件加载时标题位于顶部。

P粉864872812
P粉864872812

全部回复(1)
P粉909476457

即使在 react-router-dom@6.4.0 中,使用通用 UI 渲染布局路由仍然可以正常工作。

创建一个渲染公共标头组件的布局路由组件和一个用于嵌套路由的 Outlet

示例:

const Layout = () => (
  <>
    <CommonHeader />
    <Outlet />
  </>
);

在配置中的布局路由上导入并渲染 Layout

const routers = createBrowserRouter([
  {
    element: <Layout />,
    children: [
      {
        path: "/",
        element: <Home />,
        loader: authLoader
      },
      {
        path: "/about",
        element: <About />
      }
    ]
  }
]);

...

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号