網站首頁 編程語言 正文
一. 標簽形式
src 文件夾下創建一個 routers
文件夾,用于存放路由表
src/routers 文件夾下創建一個 index.js
文件,用于設置路由表
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 設置路由模式 */} <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 文件中設置路由鏈接、組件展示位置
import './App.css' import { Outlet, Link } from "react-router-dom"; function App() { return ( <div className="App"> {/* 路由鏈接 */} <Link to="home">home頁面</Link> <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 文件夾下創建一個 routers
文件夾,用于存放路由表
src/routers 文件夾下創建一個 index.js
文件,用于設置路由表
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 文件中獲取路由組件,設置組件展示位置
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> <Link to="about">about頁面</Link> <br /> <br /> {/* 路由組件展示位置,fallback 屬性值可以時組件 */} <Suspense fallback={<div>loading...</div>}>{element}</Suspense> </div> ); } export default App;
src/index.js 文件中使用BrowserRouter
標簽包裹 <App/>
標簽,設置路由模式
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 設置路由模式 <BrowserRouter> <React.StrictMode> <App /> </React.StrictMode> </BrowserRouter> ); reportWebVitals();
三. 實現一個經典的左目錄右內容布局結構(使用對象路由方式)
src 文件夾下創建一個 routers
文件夾,用于存放路由表
src/routers 文件夾下創建一個 index.js
文件,用于設置路由表
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 屬性對應父路由下的子路由 */ { 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 文件中獲取路由組件,設置組件展示位置
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
標簽包裹 <App/>
標簽,設置路由模式
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 設置路由模式 <BrowserRouter> <React.StrictMode> <App /> </React.StrictMode> </BrowserRouter> ); reportWebVitals();
src/routers/index.js 中對應的組件
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(); // 點擊跳轉至對應的路由 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>; }
實現效果:
原文鏈接:https://blog.csdn.net/Jie_1997/article/details/128340442
相關推薦
- 2022-07-20 Flutter系統網絡圖片加載流程解析_Android
- 2022-08-07 python中pd.cut()與pd.qcut()的對比及示例_python
- 2022-04-09 增強一個類功能三個方法
- 2022-01-27 @ConfigurationProperties放在類上跟放在方法上有什么區別
- 2022-09-06 C#中的枚舉類型(Enum)介紹_C#教程
- 2023-04-20 正則表達式:判斷是否符合USD格式
- 2022-05-08 使用Visual?Studio編寫單元測試_實用技巧
- 2022-04-11 C語言數組和指針,內存之間的關系_C 語言
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支