国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

React 路由react-router-dom詳解

這篇具有很好參考價(jià)值的文章主要介紹了React 路由react-router-dom詳解。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

React 路由react-router-dom詳解

( 路由嵌套 + 路由傳參 + 路由權(quán)限 + 路由優(yōu)化 按需導(dǎo)入 + 404頁(yè)面 )

前面我們先了解一下 路由是什么? 路由分類有哪些??jī)?nèi)置API有哪些?
可能有點(diǎn)枯燥,不喜歡看的直接跳過!

1,相關(guān)理解

  1. 單頁(yè)Web應(yīng)用(single page web application,SPA)。
  2. 整個(gè)應(yīng)用只有一個(gè)完整的頁(yè)面。
  3. 點(diǎn)擊頁(yè)面中的鏈接不會(huì)刷新頁(yè)面,只會(huì)做頁(yè)面的局部更新。
  4. 數(shù)據(jù)都需要通過ajax請(qǐng)求獲取, 并在前端異步展現(xiàn)。

2,路由的理解:

1. 什么是路由?
  1. 一個(gè)路由就是一個(gè)映射關(guān)系(key:value)
  2. key為路徑, value可能是function或component

2,react-router-dom的理解:

  1. react的一個(gè)插件庫(kù)。
  2. 專門用來實(shí)現(xiàn)一個(gè)SPA應(yīng)用。
  3. 基于react的項(xiàng)目基本都會(huì)用到此庫(kù)。

一,基本路由使用:

先看看效果:

React 路由react-router-dom詳解

1,下載安裝:

  1. win + R

  2. cmd 打開
    React 路由react-router-dom詳解

  3. cd/react項(xiàng)目文件目錄
    React 路由react-router-dom詳解

  4. 安裝:

 npm  i react-router-dom -S

React 路由react-router-dom詳解

很好,你已經(jīng)完成了,安裝!

二, 接下來是使用路由的步驟

文件
React 路由react-router-dom詳解

1, 創(chuàng)建頁(yè)面

src路徑下新建views文件,頁(yè)面組件新建在這里面

React 路由react-router-dom詳解

2,新建路由文件

src路徑下 新建router文件夾,在這里配置路由

React 路由react-router-dom詳解

3,配置路由文件:

router路徑下 新建index.jsx文件夾,在這里配置路由

React 路由react-router-dom詳解

  1. 導(dǎo)入路由依賴
// 導(dǎo)入路由依賴
import { useRoutes } from "react-router-dom";
  1. 導(dǎo)入所需組件,首頁(yè) 關(guān)于
// 導(dǎo)入所需組件,首頁(yè)  關(guān)于
import HomeView from "../views/HomeView";
import AboutView from "../views/AboutView";
  1. 創(chuàng)建路由
// 創(chuàng)建路由
const routes = [
  {
    path: "/",
    element: (<HomeView></HomeView>)
  },
  {
    path: "/about",
    element: (<AboutView ></AboutView >)
  },
];
  1. 使用useRoutes 創(chuàng)建,導(dǎo)出路由
// 使用useRoutes 創(chuàng)建
export default function RouterView() {
  // 創(chuàng)建路由
  const elem = useRoutes(routes);
  // 返回接口
  return elem;
}

完整代碼:
React 路由react-router-dom詳解

以上配置是路由基礎(chǔ)配置
這樣還是看不到效果的,要配置導(dǎo)航使用路由

4,使用并切換路由,配置App.jsx文件:

路徑:src / App.jsx

  1. 導(dǎo)入:
import RouterView from "./router";
import { HashRouter as Router, NavLink } from "react-router-dom";

Router: 路由

RouterView: 路由組件 ,導(dǎo)入路由文件

HashRouter: 哈希路由

NavLink: 導(dǎo)航鏈接

  1. 使用,配置導(dǎo)航鏈接,這里使用 函數(shù)組件:

全部代碼:

import RouterView from "./router";
import { HashRouter as Router, NavLink } from "react-router-dom";

function App() {
  return (
    <Router>
      <NavLink to="/">首頁(yè)</NavLink> &emsp;||&emsp;
      <NavLink to="/about">關(guān)于</NavLink> &emsp;||&emsp;
      <RouterView />
    </Router>
  );
}

export default App;
  1. 效果圖:
    React 路由react-router-dom詳解

三, 路由傳參:

1,路由文件配置:

React 路由react-router-dom詳解

2,組件使用:

ProductView.jsx文件配置:

  1. 引入useParams

這里我新建了一個(gè)組件 ProductView.jsx

 import { useParams } from "react-router-dom"
  1. 獲取參數(shù)
  const { id } = useParams()
  1. 渲染參數(shù):
    <h1>產(chǎn)品參數(shù):{id}</h1>
ProductView.jsx 文件代碼:

React 路由react-router-dom詳解

App.jsx 文件配置:

傳參:

<NavLink to="/product/123">產(chǎn)品123</NavLink> &emsp;||&emsp;
<NavLink to="/product/456">產(chǎn)品456</NavLink> &emsp;||&emsp;
App.jsx 文件代碼:

React 路由react-router-dom詳解

效果:
React 路由react-router-dom詳解

四, 路由嵌套:

  1. 路由文件配置:src / router / index.jsx
// 導(dǎo)入路由依賴
import { useRoutes } from "react-router-dom";
// 導(dǎo)入所需組件,首頁(yè)  關(guān)于
import HomeView from "../views/HomeView";
import AboutView from "../views/AboutView";
import ProductView from "../views/ProductView";
import AdminView from "../views/admin/AdminView";
import DashView from "../views/admin/DashView";
import OrderList from "../views/admin/OrderList";
// 組件嵌套組件
import Private from "./Private";
// 創(chuàng)建路由
const routes = [
  {
    path: "/",
    element: <HomeView></HomeView>
  },
  {
    path: "/about",
     element: <AboutView></AboutView>
  },
  {
    path: "/product/:id",
    element: <ProductView></ProductView>
  },
  {
    path: "/admin",
    element:  <AdminView />
    // 配置子路由
    children: [
      {
        path: "",
        element: <DashView></DashView>
      },
      {
        path: "orderlist",
        element: <OrderList></OrderList>
      }
    ]
  },


// 使用useRoutes 創(chuàng)建
export default function RouterView() {
  // 創(chuàng)建路由
  const elem = useRoutes(routes);
  // 返回接口
  return elem;
}

  1. 組件文件配置:

新建文件 以下圖:
React 路由react-router-dom詳解

views / AdminView.jsx文件:

import { NavLink, Outlet } from "react-router-dom";
function AdminView() {
  return (
    <div>
      <h3>管理頁(yè)面</h3>
      <NavLink to="">管理頁(yè)面</NavLink>&emsp;||&emsp;
      <NavLink to="orderlist">概覽頁(yè)面</NavLink>
      <Outlet />
    </div>
  );
}
export default AdminView;

NavLink :導(dǎo)航鏈接
Outlet: 子組件容器

views / DashView.jsx文件:

function DashView() {
    return ( <div>
        <h3>概覽頁(yè)面內(nèi)容</h3>
    </div> );
}
export default DashView;

views / OrderList.jsx文件:

function OrderList() {
    return (<div>
        <h3>管理頁(yè)面內(nèi)容</h3>
    </div>);
}
export default OrderList;

效果圖:

React 路由react-router-dom詳解

五, 路由查詢參數(shù):

1, App.jsx文件 導(dǎo)航配置:

React 路由react-router-dom詳解
代碼:

import RouterView from "./router";
import { HashRouter as Router, NavLink } from "react-router-dom"

function App() {
    return (<Router>
        <NavLink to="/">首頁(yè)</NavLink >  &emsp;||&emsp;
        <NavLink to="/about">關(guān)于</NavLink> &emsp;||&emsp;
        <NavLink to="/admin">admin頁(yè)面</NavLink> &emsp;||&emsp;
        <NavLink to="/product/123">產(chǎn)品123</NavLink> &emsp;||&emsp;
        <NavLink to="/product/456">產(chǎn)品456</NavLink> &emsp;||&emsp;
        <NavLink to="/about?redirect=hello">產(chǎn)品hello</NavLink> &emsp;||&emsp;
        <NavLink to="/about?redirect=word">產(chǎn)品word</NavLink> &emsp;||&emsp;
        <RouterView></RouterView>
    </Router>);
}
export default App;

傳參:?redirect= “ 傳的查詢參數(shù) ”

2,AboutView.jsx 文件:

代碼:

import { useSearchParams, NavLink, useNavigate, useLocation } from "react-router-dom"
function AboutView() {
    // 獲取about查詢參數(shù)redirect的值
    const [SearchParams] = useSearchParams()
    // 獲取redirect的值
    const redirect = SearchParams.get('redirect')
    // 渲染
    return (<div>
         {/* // 傳遞查詢參數(shù) */}
        <h1>About頁(yè)面查詢參數(shù):-{redirect}</h1>
    </div>);
}

// 導(dǎo)出組件
export default AboutView;

六,組件按需導(dǎo)入(懶加載):

用于 性能優(yōu)化。
lazy方法, subspense組件

1,定義懶加載組件router / LazyLoad.jsx

// 動(dòng)態(tài)加載組件
import { lazy, Suspense } from "react";
// 動(dòng)態(tài)加載組件 方法
function LazyLoad(url) {
  // 配置動(dòng)態(tài)加載組件路徑
  const Element = lazy(() => import(url));
  return (
    // 返回組件,Suspense:懶加載組件
    <Suspense fallback={<h3>加載中. . . </h3>}>
      {/* 內(nèi)容組件 */}
      <Element />
    </Suspense>
  );
}
// 導(dǎo)出方法
export default LazyLoad;

2,路由router / index.jsx文件使用:

引入:
// 導(dǎo)入懶加載組件方法
import LazyLoad from "./LazyLoad";
使用:
element: LazyLoad("../views/HomeView")
router / index.jsx文件 代碼:
// 導(dǎo)入路由依賴
import { useRoutes } from "react-router-dom";
// 導(dǎo)入所需組件,首頁(yè)  關(guān)于
import HomeView from "../views/HomeView";
import AboutView from "../views/AboutView";
import ProductView from "../views/ProductView";
import AdminView from "../views/admin/AdminView";
import DashView from "../views/admin/DashView";
import OrderList from "../views/admin/OrderList";

// 創(chuàng)建路由
const routes = [
  {
    path: "/",
    element: ("../views/HomeView")
  },
  {
    path: "/about",
    element: ("../views/AboutView")
  },
  {
    path: "/product/:id",
    element: ("../views/ProductView")
  },
  {
    path: "/admin",
    element:  <Private><AdminView /></Private>,
    // 配置子路由
    children: [
      {
        path: "",
        element: <DashView></DashView>
      },
      {
        path: "orderlist",
        element: <OrderList></OrderList>
      }
    ]
  },

];
// 使用useRoutes 創(chuàng)建
export default function RouterView() {
  // 創(chuàng)建路由
  const elem = useRoutes(routes);
  // 返回接口
  return elem;
}

效果圖:

按需加載

React 路由react-router-dom詳解

七,路由權(quán)限:

類似于Vue里的路由守衛(wèi):未登陸 不能打開一些頁(yè)面
有權(quán)限返回子組件,沒有權(quán)限跳轉(zhuǎn)到登錄

1,定義權(quán)限組件router/Private.jsx

本地存儲(chǔ)有 token,就有權(quán)限,
沒有token,就沒有權(quán)限

import {Navigate} from "react-router-dom"
// 權(quán)限路由
function Private(props) {
    if(localStorage.getItem("token")) {
        return <>{props.children}</> ;
    }else {
        return <Navigate to="/" />
    }
}

export default Private;

2,路由index . jsx文件使用:

權(quán)限組件包裹著 內(nèi)容組件
element: < Private>< AdminView /></ Private>,

// 導(dǎo)入路由依賴
import { useRoutes } from "react-router-dom";
// 導(dǎo)入所需組件,首頁(yè)  關(guān)于
import HomeView from "../views/HomeView";
import AboutView from "../views/AboutView";
import ProductView from "../views/ProductView";
import AdminView from "../views/admin/AdminView";
import DashView from "../views/admin/DashView";
import OrderList from "../views/admin/OrderList";
import Private from "./Private";
import LazyLoad from "./LazyLoad";
// 創(chuàng)建路由
const routes = [
  {
    path: "/",
    element: LazyLoad("../views/HomeView")
  },
  {
    path: "/about",
    element: LazyLoad("../views/AboutView")
  },
  {
    path: "/product/:id",
    element: LazyLoad("../views/ProductView")
  },
  {
    path: "/admin",
    element:  <Private><AdminView /></Private>,
    // 配置子路由
    children: [
      {
        path: "",
        element: <DashView></DashView>
      },
      {
        path: "orderlist",
        element: <OrderList></OrderList>
      }
    ]
  },

];
// 使用useRoutes 創(chuàng)建
export default function RouterView() {
  // 創(chuàng)建路由
  const elem = useRoutes(routes);
  // 返回接口
  return elem;
}

效果圖:

React 路由react-router-dom詳解

八,設(shè)置404錯(cuò)誤頁(yè)面:

1,新建404組件文件 src / views / NoMatch.jsx :

import { NavLink } from "react-router-dom"
function NoMatch() {
    return (<div>
        <h1>你的頁(yè)面被??偷走了!</h1>
        <NavLink to="/">首頁(yè)</NavLink>
    </div>);
}
export default NoMatch;

2,路由配置,src / router / index.jsx :

// 配置404頁(yè)面
{
path: “*”,
element:
}
path 值為 *

// 導(dǎo)入路由依賴
import { useRoutes } from "react-router-dom";
// 導(dǎo)入所需組件,首頁(yè)  關(guān)于
import NoMatch from "../views/NoMatch";
import HomeView from "../views/HomeView";
// import AboutView from "../views/AboutView";
import ProductView from "../views/ProductView";
import AdminView from "../views/admin/AdminView";
import DashView from "../views/admin/DashView";
import OrderList from "../views/admin/OrderList";
// 導(dǎo)入權(quán)限組件
import Private from "./Private";
// 導(dǎo)入懶加載組件方法
import LazyLoad from "./LazyLoad";
// 創(chuàng)建路由
const routes = [
  {
    path: "/",
    element: LazyLoad("../views/HomeView")
  },
  {
    path: "/about",
    element: LazyLoad("../views/AboutView")
  },
  {
    path: "/product/:id",
    element: LazyLoad("../views/ProductView")
  },
  {
    path: "/admin",
    element: ( <Private><AdminView /></Private>),
    // 配置子路由
    children: [
      {
        path: "",
        element: <DashView/>
      },
      {
        path: "orderlist",
        element: <OrderList/>
      }
    ]
  },
  // 配置404頁(yè)面
  {
    path: "*",
    element: <NoMatch />
  }
];

// 使用useRoutes 創(chuàng)建
export default function RouterView() {
  // 創(chuàng)建路由
  const elem = useRoutes(routes);
  // 返回接口
  return elem;
}

效果圖:

React 路由react-router-dom詳解

總結(jié):

路由組件與方法:

  1. 組件

    < HashRouter> 哈希路由
    < BrowserRouter> 瀏覽器路由
    < NavLink> 導(dǎo)航鏈接
    選中會(huì)有active 類名
    < Link>導(dǎo)航鏈接
    < OutLet>子路由容器

  2. 方法

    useRoutes使用路由配置
    useParams() 路由參數(shù)
    useSearchParams() 獲取查詢參數(shù)

React 路由react-router-dom詳解文章來源地址http://www.zghlxwxcb.cn/news/detail-410798.html



到了這里,關(guān)于React 路由react-router-dom詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【React】react-router 路由詳解

    【React】react-router 路由詳解

    ?????? ??個(gè)人主頁(yè): 阿選不出來 ?????? ??個(gè)人簡(jiǎn)介: 一名大二在校生,學(xué)習(xí)方向前端,不定時(shí)更新自己學(xué)習(xí)道路上的一些筆記. ?????? ??目前開發(fā)的專欄: JS ??Vue??React?? ?????? 前端路由就是把不同路由對(duì)應(yīng)不同的內(nèi)容或頁(yè)面的任務(wù)交給前端來做,根據(jù)不同的url地

    2024年02月01日
    瀏覽(23)
  • React Router 中的路由導(dǎo)航方法:push() 和 replace() 詳解

    在 React Router 中, this.props.history.push() 和 this.props.history.replace() 是用于編程式導(dǎo)航的兩個(gè)常用方法。它們?cè)试S我們?cè)诮M件中動(dòng)態(tài)地更改路由,并可選地傳遞狀態(tài)參數(shù)。本文將介紹這兩個(gè)方法的用法和區(qū)別。 push() 方法將在導(dǎo)航時(shí)創(chuàng)建一個(gè)新的歷史記錄條目,并將用戶重定向到新

    2024年03月15日
    瀏覽(28)
  • 【React】React-router路由

    路由是根據(jù)不同的url地址展示不同的內(nèi)容或頁(yè)面 注: 一個(gè)針對(duì)react設(shè)計(jì)的路由解決方案,可以友好的幫助解決React components到URL之間的同步映射關(guān)系 導(dǎo)入路由 注:路由模式有 HashRouter 和 BrowserRouter 兩種模式,其中BrowserRouter的路徑?jīng)]有#,樣式好看,真正朝后端發(fā)請(qǐng)求,后端若

    2023年04月17日
    瀏覽(34)
  • <React-Router>超全react路由知識(shí)點(diǎn)(跳轉(zhuǎn)、傳參、子路由、重定向等)

    <React-Router>超全react路由知識(shí)點(diǎn)(跳轉(zhuǎn)、傳參、子路由、重定向等)

    目錄 一、路由環(huán)境配置 1.搭建一個(gè)項(xiàng)目名為boke(自定義),編輯文檔語(yǔ)言為TypeScript的項(xiàng)目環(huán)境。 2.安裝所有package.json中的依賴----安裝包(注意要【cd 項(xiàng)目名】進(jìn)入項(xiàng)目文件安裝) 3.添加React-Router路由 4.文件、目錄相關(guān)修改與搭建 二、路由的懶加載 ?三、路由跳轉(zhuǎn) 1.標(biāo)簽跳轉(zhuǎn)(

    2024年02月11日
    瀏覽(59)
  • 探索React Router:實(shí)現(xiàn)動(dòng)態(tài)二級(jí)路由

    探索React Router:實(shí)現(xiàn)動(dòng)態(tài)二級(jí)路由

    我有一個(gè)路由配置的二維數(shù)組,想根據(jù)這個(gè)數(shù)組結(jié)合路由組件來動(dòng)態(tài)生成路由,應(yīng)該怎么樣實(shí)現(xiàn)。在 React Router 6 中渲染二級(jí)路由的方式跟 React Router 65相比有一些變化,但核心思路仍然是利用 Route 組件和路由嵌套的方式。下面是具體的步驟: 定義路由數(shù)組 注意,這里我們使用

    2024年04月25日
    瀏覽(26)
  • React-Router路由基礎(chǔ)篇(簡(jiǎn)單易學(xué))

    React-Router路由基礎(chǔ)篇(簡(jiǎn)單易學(xué))

    文章目錄 系列文章目錄 前言 一、pandas是什么? 二、使用步驟 1.引入庫(kù) 2.讀入數(shù)據(jù) 總結(jié) 提示:這里可以添加本文要記錄的大概內(nèi)容: 例如:隨著人工智能的不斷發(fā)展,機(jī)器學(xué)習(xí)這門技術(shù)也越來越重要,很多人都開啟了學(xué)習(xí)機(jī)器學(xué)習(xí),本文就介紹了機(jī)器學(xué)習(xí)的基礎(chǔ)內(nèi)容。 (

    2024年04月14日
    瀏覽(24)
  • React-Router詳解

    React-Router詳解

    React-Router是一款用于構(gòu)建單頁(yè)面應(yīng)用(SPA)中處理路由的JavaScript庫(kù)。在現(xiàn)代的Web應(yīng)用中,SPA已經(jīng)成為了一種常見的應(yīng)用架構(gòu)模式,它允許在不刷新整個(gè)頁(yè)面的情況下進(jìn)行交互式的用戶體驗(yàn)。而React-Router作為React生態(tài)系統(tǒng)中的路由管理工具,為開發(fā)者提供了一種簡(jiǎn)潔、靈活且強(qiáng)

    2024年02月08日
    瀏覽(26)
  • 【React Router 6 快速上手一】重定向Navigate / useRoutes路由表 / 嵌套路由Outlet

    【React Router 6 快速上手一】重定向Navigate / useRoutes路由表 / 嵌套路由Outlet

    前言 博主主頁(yè)????蠟筆雛田學(xué)代碼 專欄鏈接????React專欄 之前學(xué)習(xí)了react-router-dom5版本的相關(guān)內(nèi)容 參考文章????React路由(詳解版)和 路由的模糊匹配,重定向以及嵌套路由 今天來學(xué)習(xí)react-router-dom6版本的相關(guān)知識(shí)! 感興趣的小伙伴一起來看看吧~?? React Router 以三個(gè)不

    2024年02月02日
    瀏覽(22)
  • react 11之 router6路由 (兩種路由模式、兩種路由跳轉(zhuǎn)、兩種傳參與接收參數(shù)、嵌套路由,layout組件、路由懶加載)

    react 11之 router6路由 (兩種路由模式、兩種路由跳轉(zhuǎn)、兩種傳參與接收參數(shù)、嵌套路由,layout組件、路由懶加載)

    npm i react-router-dom 兩種模式 Router:所有路由組件的根組件,包裹路由的最外層容器 Link:跳轉(zhuǎn)路由組件 Routes :用于定義和渲染路由規(guī)則( 用于替換 Switch 組件) Route:路由規(guī)則匹配組件,顯示當(dāng)前規(guī)則對(duì)應(yīng)的組件 exact = 精確匹配,只有當(dāng) path 和 pathname 完全匹配時(shí)才會(huì)展示該路由

    2024年02月12日
    瀏覽(27)
  • 【React Router】React Router學(xué)習(xí)筆記

    【React Router】React Router學(xué)習(xí)筆記

    React Router 是一個(gè)基于 React 之上的強(qiáng)大路由庫(kù),它可以讓你向應(yīng)用中快速地添加視圖和數(shù)據(jù)流,同時(shí)保持頁(yè)面與 URL 間的同步。 React Router 知道如何為我們搭建嵌套的 UI,因此我們不用手動(dòng)找出需要渲染哪些 Child 組件。 獲取URL參數(shù)。當(dāng)渲染組件時(shí),React Router 會(huì)自動(dòng)向 Route 組件

    2024年02月08日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包