最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

React Router6.x路由表封裝的兩種寫法

 更新時間:2023年01月31日 09:23:57   作者:Jie_1997  
本文主要介紹了React Router6.x路由表封裝的兩種寫法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

一. 標(biāo)簽形式

src 文件夾下創(chuàng)建一個 routers 文件夾,用于存放路由表

src/routers 文件夾下創(chuàng)建一個 index.js 文件,用于設(shè)置路由表

import { BrowserRouter, Routes, Route, Navigate } from "react-router-dom";
import App from "../App";
import { lazy, Suspense } from "react";
// 使用路由懶加載(lazy)
const Home = lazy(() => import("@/pages/Home"));
const About = lazy(() => import("@/pages/About"));

const baseRouter = () => (
  {/* BrowserRouter 設(shè)置路由模式 */}
  <BrowserRouter>
    {/* fallback 屬性值可以時組件 */}
    <Suspense fallback={<div>loading...</div>}>
      <Routes>
        <Route path="/" element={<App />}>
          <Route path="/" element={<Navigate to="/home" />}></Route>
          <Route path="/home" element={<Home />}></Route>
          <Route path="/about" element={<About />}></Route>
        </Route>
      </Routes>
    </Suspense>
  </BrowserRouter>
);
export default baseRouter;

src/App.js 文件中設(shè)置路由鏈接、組件展示位置

import './App.css'
import { Outlet, Link } from "react-router-dom";

function App() {
  return (
    <div className="App">
      {/* 路由鏈接 */}
      <Link to="home">home頁面</Link>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
      <Link to="about">about頁面</Link>
      <br />
      <br />
      {/* 組件占位,在該位置渲染組件 */}
      <Outlet />
    </div>
  );
}
export default App;

src/index.js 文件中使用路由表,替換之前的 <App/>

import React from "react";
import ReactDOM from "react-dom/client";
import reportWebVitals from "./reportWebVitals";
import Router from "./routers";

const root = ReactDOM.createRoot(document.getElementById("root"));
root.render(
  <React.StrictMode>
    {/* 使用路由表 */}
    <Router />
  </React.StrictMode>
);
reportWebVitals();

二. 對象形式

src 文件夾下創(chuàng)建一個 routers 文件夾,用于存放路由表

src/routers 文件夾下創(chuàng)建一個 index.js 文件,用于設(shè)置路由表

import { Navigate } from "react-router-dom";
import { lazy } from "react";
// 使用路由懶加載(lazy)
const Home = lazy(() => import("@/pages/Home"));
const About = lazy(() => import("@/pages/About"));

const routers = [
  {
    path: "/",
    element: <Navigate to="/home" />,
  },
  {
    path: "/home",
    element: <Home />,
  },
  {
    path: "/about",
    element: <About />,
  },
];
export default routers;

src/App.js 文件中獲取路由組件,設(shè)置組件展示位置

import "reset-css";
import "./App.scss";
import { useRoutes, Link } from "react-router-dom";
import routers from "./routers";
import { Suspense } from "react";

function App() {
  // 使用 useRoutes 獲取路由組件
  const element = useRoutes(routers);
  return (
    <div className="App">
      {/* 路由鏈接 */}
      <Link to="home">home頁面</Link>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
      <Link to="about">about頁面</Link>
      <br />
      <br />
      {/* 路由組件展示位置,fallback 屬性值可以時組件 */}
      <Suspense fallback={<div>loading...</div>}>{element}</Suspense>
    </div>
  );
}
export default App;

src/index.js 文件中使用BrowserRouter標(biāo)簽包裹 <App/>標(biāo)簽,設(shè)置路由模式

import React from "react";
import ReactDOM from "react-dom/client";
import App from "./App";
import reportWebVitals from "./reportWebVitals";
import { BrowserRouter } from "react-router-dom";

const root = ReactDOM.createRoot(document.getElementById("root"));
root.render(
  // BrowserRouter 設(shè)置路由模式
  <BrowserRouter>
    <React.StrictMode>
      <App />
    </React.StrictMode>
  </BrowserRouter>
);
reportWebVitals();

三. 實現(xiàn)一個經(jīng)典的左目錄右內(nèi)容布局結(jié)構(gòu)(使用對象路由方式)

src 文件夾下創(chuàng)建一個 routers 文件夾,用于存放路由表

src/routers 文件夾下創(chuàng)建一個 index.js 文件,用于設(shè)置路由表

import { Navigate } from "react-router-dom";
import { lazy } from "react";
// 使用路由懶加載(lazy)
const Home = lazy(() => import("@/pages/Home"));
const Page1 = lazy(() => import("@/pages/Page1"));
const Page2 = lazy(() => import("@/pages/Page2"));
const Page3 = lazy(() => import("@/pages/Page3"));

const routers = [
  /**
   * 父子路由嵌套使用
   * 父路由路徑為 '/'
   * children 屬性對應(yīng)父路由下的子路由
   */
  {
    path: "/",
    element: <Home />,
    children: [
      // 根路徑時,使用 Navigate 路由重定向至 page1 頁面
      {
        path: "",
        element: <Navigate to="/page1" />,
      },
      {
        path: "page1",
        element: <Page1 />,
      },
      {
        path: "page2",
        element: <Page2 />,
      },
      {
        path: "page3",
        element: <Page3 />,
      },
    ],
  },
];
export default routers;

src/App.js 文件中獲取路由組件,設(shè)置組件展示位置

import "./App.css";
import { Suspense } from "react";
import { useRoutes } from "react-router-dom";
import routers from "./routers";
function App() {
  // 使用 useRoutes 獲取路由組件
  const element = useRoutes(routers);
  return (
    <div className="App">
      {/* 
        路由組件展示位置 {element}
        Suspense:加載指示器(loading indicator),以防其組件樹中的某些子組件尚未具備渲染條件
        fallback 屬性值可以是組件 
      */}
      <Suspense fallback={<div>loading...</div>}>{element}</Suspense>
    </div>
  );
}

export default App;

src/index.js 文件中使用BrowserRouter標(biāo)簽包裹 <App/>標(biāo)簽,設(shè)置路由模式

import React from "react";
import ReactDOM from "react-dom/client";
import App from "./App";
import reportWebVitals from "./reportWebVitals";
import { BrowserRouter } from "react-router-dom";

const root = ReactDOM.createRoot(document.getElementById("root"));
root.render(
  // BrowserRouter 設(shè)置路由模式
  <BrowserRouter>
    <React.StrictMode>
      <App />
    </React.StrictMode>
  </BrowserRouter>
);
reportWebVitals();

src/routers/index.js 中對應(yīng)的組件

在這里插入圖片描述

Home組件:

使用了 ant4 進行布局

import {
  DesktopOutlined,
  PieChartOutlined,
  UserOutlined,
} from "@ant-design/icons";
import { Layout, Menu } from "antd";
import React, { useState, Suspense } from "react";
import { Outlet, useNavigate } from "react-router-dom";

const App = () => {
  const { Content, Sider } = Layout;
  function getItem(label, key, icon, children) {
    return {
      key,
      icon,
      children,
      label,
    };
  }
  const items = [
    getItem("目錄一", "/page1", <PieChartOutlined />),
    getItem("目錄二", "/page2", <DesktopOutlined />),
    getItem("目錄三", "/page3", <UserOutlined />),
  ];
  const [collapsed, setCollapsed] = useState(false);
  let navigate = useNavigate();
  // 點擊跳轉(zhuǎn)至對應(yīng)的路由
  const clickMenu = (evt) => {
    navigate(evt.key);
  };
  return (
    <Layout
      style={{
        minHeight: "100vh",
      }}
    >
      <Sider
        collapsible
        collapsed={collapsed}
        onCollapse={(value) => setCollapsed(value)}
      >
        <div className="logo" />
        <Menu
          theme="dark"
          defaultSelectedKeys={["1"]}
          mode="inline"
          items={items}
          onClick={clickMenu}
        />
      </Sider>
      <Layout className="site-layout">
        <Content>
          {/* 子路由的組件占位,在該位置渲染子組件 */}
          <Suspense fallback={<div>loading...</div>}>
            <Outlet />
          </Suspense>
        </Content>
      </Layout>
    </Layout>
  );
};
export default App;

Page1組件:

import React from "react";

export default function Page1() {
  return <div>Page1</div>;
}

Page2組件:

import React from "react";

export default function Page2() {
  return <div>Page2</div>;
}

Page3組件:

import React from "react";

export default function Page3() {
  return <div>Page3</div>;
}

實現(xiàn)效果:

在這里插入圖片描述

到此這篇關(guān)于React Router6.x路由表封裝的兩種寫法的文章就介紹到這了,更多相關(guān)React Router6.x路由表封裝內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • React父組件如何調(diào)用子組件的方法推薦

    React父組件如何調(diào)用子組件的方法推薦

    在React中,我們經(jīng)常在子組件中調(diào)用父組件的方法,一般用props回調(diào)即可,這篇文章主要介紹了React父組件如何調(diào)用子組件的方法推薦,需要的朋友可以參考下
    2023-11-11
  • React Hook用法示例詳解(6個常見hook)

    React Hook用法示例詳解(6個常見hook)

    這篇文章主要介紹了React Hook用法詳解(6個常見hook),本文通過實例代碼給大家介紹了6個常見hook,需要的朋友可以參考下
    2021-04-04
  • 在react項目中使用antd的form組件,動態(tài)設(shè)置input框的值

    在react項目中使用antd的form組件,動態(tài)設(shè)置input框的值

    這篇文章主要介紹了在react項目中使用antd的form組件,動態(tài)設(shè)置input框的值,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • 使用react遍歷對象生成dom

    使用react遍歷對象生成dom

    這篇文章主要介紹了使用react遍歷對象生成dom問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • react中(含hooks)同步獲取state值的方式

    react中(含hooks)同步獲取state值的方式

    這篇文章主要介紹了react(含hooks)中同步獲取state值的方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • react創(chuàng)建項目啟動報錯的完美解決方法

    react創(chuàng)建項目啟動報錯的完美解決方法

    這篇文章主要介紹了react創(chuàng)建項目啟動報錯的完美解決方法,全稱為Node Package Manager,是隨同NodeJS一起安裝的包管理工具,本文通過實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2022-08-08
  • react?路由權(quán)限動態(tài)菜單方案配置react-router-auth-plus

    react?路由權(quán)限動態(tài)菜單方案配置react-router-auth-plus

    這篇文章主要為大家介紹了react路由權(quán)限動態(tài)菜單方案react-router-auth-plus傻瓜式配置詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • 在 React 中使用 Redux 解決的問題小結(jié)

    在 React 中使用 Redux 解決的問題小結(jié)

    在 React 中組件通信的數(shù)據(jù)流是單向的,頂層組件可以通過 props 屬性向下層組件傳遞數(shù)據(jù),而下層組件不能直接向上層組件傳遞數(shù)據(jù),這篇文章主要介紹了使用react+redux實現(xiàn)彈出框案例,需要的朋友可以參考下
    2022-10-10
  • react實現(xiàn)每隔60s刷新一次接口的示例代碼

    react實現(xiàn)每隔60s刷新一次接口的示例代碼

    本文主要介紹了react實現(xiàn)每隔60s刷新一次接口的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • React與Redux之?dāng)?shù)組處理講解

    React與Redux之?dāng)?shù)組處理講解

    這篇文章主要介紹了React與Redux之?dāng)?shù)組處理講解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-09-09

最新評論

双辽市| 光山县| 香格里拉县| 大连市| 扶绥县| 曲麻莱县| 东安县| 田东县| 富顺县| 东阿县| 新余市| 张北县| 墨脱县| 怀柔区| 石家庄市| 望江县| 清苑县| 巩义市| 江孜县| 盘锦市| 于都县| 牟定县| 海安县| 高青县| 兴化市| 临桂县| 临沭县| 瑞安市| 和龙市| 孟州市| 林甸县| 荣昌县| 德安县| 左权县| 永泰县| 尚义县| 遂宁市| 聊城市| 崇州市| 察哈| 湘潭县|