From 44e70ac25b2e28ce0480ffcb780ed73a6a00d2c7 Mon Sep 17 00:00:00 2001 From: shikong <919411476@qq.com> Date: Mon, 28 Oct 2024 13:41:15 +0800 Subject: [PATCH] =?UTF-8?q?12.=20react-router=20=E5=9F=BA=E6=9C=AC?= =?UTF-8?q?=E4=BD=BF=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/App.js | 37 ++++++++++++++++++++++++--------- src/pages/Page3.js | 10 +++++++++ src/pages/SonPage.js | 44 ++++++++++++++++++++++++++++++++++++++++ src/pages/SonPageLazy.js | 44 ++++++++++++++++++++++++++++++++++++++++ 4 files changed, 125 insertions(+), 10 deletions(-) create mode 100644 src/pages/Page3.js create mode 100644 src/pages/SonPage.js create mode 100644 src/pages/SonPageLazy.js diff --git a/src/App.js b/src/App.js index 001cc13..bdf0b82 100644 --- a/src/App.js +++ b/src/App.js @@ -1,4 +1,4 @@ -import React, {useState} from "react"; +import React, {useState, Suspense} from "react"; // import logo from './logo.svg'; import './App.css'; @@ -6,6 +6,11 @@ import InputComponent from "./components/InputComponent"; import SonComponent from "./components/SonComponent"; import SonComponent2 from "./components/SonComponent2"; import {Link, NavLink, Route, Routes} from "react-router-dom"; +import SonPage from "./pages/SonPage"; +import Page3 from "./pages/Page3"; + +// 异步组件, 懒加载 +const LazyPage = React.lazy(()=> import("./pages/SonPageLazy")) function App() { // vue3 组合式 API @@ -177,6 +182,8 @@ function App() { 首页 页面1 页面2 + 页面3-子页面 + 页面3-子页面2
@@ -186,14 +193,24 @@ function App() { 页面2
- {/* react router v5 和 v6 有较大区别*/} - {/* v5 中为 Switch*/} - - {/* v6 为 element 或 Component */} - Router Page 1}> - {/* v5 只有 component */} -
Router Page 2
}>
-
+ {/*过渡效果*/} + ...加载中...}> + {/* react router v5 和 v6 有较大区别*/} + {/* v5 中为 Switch*/} + + {/* v6 为 element 或 Component */} + Router Page 1}> + {/* v5 只有 component */} +
Router Page 2
}>
+ + }> + }> + + + +
+
+ {/*class 类名必须为 className, 内容只能是字符串*/}
{/*logo*/} @@ -229,7 +246,7 @@ function App() {
- +
diff --git a/src/pages/Page3.js b/src/pages/Page3.js new file mode 100644 index 0000000..d29a982 --- /dev/null +++ b/src/pages/Page3.js @@ -0,0 +1,10 @@ +import {Outlet} from "react-router-dom"; + +export default function Page3(){ + return
+ Router Page3 + + {/*指定子页面显示位置*/} + +
+} diff --git a/src/pages/SonPage.js b/src/pages/SonPage.js new file mode 100644 index 0000000..5b4bc42 --- /dev/null +++ b/src/pages/SonPage.js @@ -0,0 +1,44 @@ +import {useLocation, useNavigate, useParams, useSearchParams} from "react-router-dom"; +import {useCallback} from "react"; + +export default function SonPage(){ + // 适用于 /path/:id 形式 + let params = useParams() + + // 适用于 /path?page=xxx 形式 + let [query] = useSearchParams() + console.log(query, query.get("page")) + + let location = useLocation() + + const print = useCallback((obj)=>{ + return JSON.stringify(obj) + },[]) + + const nav = useNavigate() + + return
+ Son Page + +
+ params => {print(params)} +
+ +
+ query.get("page") => {print(query.get("page"))} +
+ +
+ location => {print(location)} +
+ +
+ + +
+
+} diff --git a/src/pages/SonPageLazy.js b/src/pages/SonPageLazy.js new file mode 100644 index 0000000..5b4bc42 --- /dev/null +++ b/src/pages/SonPageLazy.js @@ -0,0 +1,44 @@ +import {useLocation, useNavigate, useParams, useSearchParams} from "react-router-dom"; +import {useCallback} from "react"; + +export default function SonPage(){ + // 适用于 /path/:id 形式 + let params = useParams() + + // 适用于 /path?page=xxx 形式 + let [query] = useSearchParams() + console.log(query, query.get("page")) + + let location = useLocation() + + const print = useCallback((obj)=>{ + return JSON.stringify(obj) + },[]) + + const nav = useNavigate() + + return
+ Son Page + +
+ params => {print(params)} +
+ +
+ query.get("page") => {print(query.get("page"))} +
+ +
+ location => {print(location)} +
+ +
+ + +
+
+}