網(wǎng)站首頁 編程語言 正文
一. 標(biāo)簽形式
src 文件夾下創(chuàng)建一個(gè) routers
文件夾,用于存放路由表
src/routers 文件夾下創(chuàng)建一個(gè) 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 屬性值可以時(shí)組件 */} <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> <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();
二. 對(duì)象形式
src 文件夾下創(chuàng)建一個(gè) routers
文件夾,用于存放路由表
src/routers 文件夾下創(chuàng)建一個(gè) 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> <Link to="about">about頁面</Link> <br /> <br /> {/* 路由組件展示位置,fallback 屬性值可以時(shí)組件 */} <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();
三. 實(shí)現(xiàn)一個(gè)經(jīng)典的左目錄右內(nèi)容布局結(jié)構(gòu)(使用對(duì)象路由方式)
src 文件夾下創(chuàng)建一個(gè) routers
文件夾,用于存放路由表
src/routers 文件夾下創(chuàng)建一個(gè) 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 屬性對(duì)應(yīng)父路由下的子路由 */ { path: "/", element: <Home />, children: [ // 根路徑時(shí),使用 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 中對(duì)應(yīng)的組件
Home組件:
使用了 ant4 進(jìn)行布局
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(); // 點(diǎn)擊跳轉(zhuǎn)至對(duì)應(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>; }
實(shí)現(xiàn)效果:
原文鏈接:https://blog.csdn.net/Jie_1997/article/details/128340442
相關(guān)推薦
- 2022-04-19 Windows中Python上傳文件到Liunx下的fastdfs
- 2022-10-07 Unity游戲開發(fā)實(shí)現(xiàn)場景切換示例_C#教程
- 2023-10-14 List排序問題
- 2022-08-18 nginx之queue的具體使用_nginx
- 2022-12-19 Tensorflow自定義模型與訓(xùn)練超詳細(xì)講解_python
- 2021-12-28 Android中實(shí)現(xiàn)視差滾動(dòng)示例介紹_Android
- 2022-12-08 Kubernetes集群模擬刪除k8s重裝詳解_云其它
- 2022-07-09 C語言堆與二叉樹的順序結(jié)構(gòu)與實(shí)現(xiàn)_C 語言
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支