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

React-路由 react-router-dom

這篇具有很好參考價值的文章主要介紹了React-路由 react-router-dom。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

前端路由的功能:讓用戶從一個頁面跳轉(zhuǎn)到另一個頁面。
前端路由是一套映射規(guī)則,在 React 中,是 URL 路徑與組件的對應(yīng)關(guān)系。
使用 React 路由簡單來說就是配置路徑與組件(配對)

路由的本質(zhì): 一個路徑 path 對應(yīng)唯一的一個組件 component 當我們訪問一個 path 自動把 path 對應(yīng)的組件進行渲染。

React 路由基本使用

1.安裝

首先你需要有一個 React 項目:npx create-react-app my-app (這是 React 腳手架初始化項目)

注:React 路由使用前需要先安裝 react-router-dom 的包,React 腳手架初始化項目時不會自動安裝這個包,需要我們手動再安裝

安裝包yarn add react-router-domnpm i react-router-dom@6

(注:本文使用的 react-router-dom 版本為 ^6.3.0

2.按需導入包中的核心組件

import { BrowserRouter, Routes, Route, Link } from 'react-router-dom'

說明:

  • BrowerRouter:包裹整個應(yīng)用,一個 React 應(yīng)用只需要使用一次,這個組件可以和?HashRouter 替換,二者主要區(qū)別如下:

模式

實現(xiàn)方式

路由url表現(xiàn)

HashRouter

監(jiān)聽url hash值實現(xiàn)

http://localhost:3000/#/about

BrowerRouter

h5的 history.pushState API實現(xiàn)

http://localhost:3000/about

  • ?Link:用于指定導航鏈接,完成聲明式的路由跳轉(zhuǎn) 類似于 <router-link />(渲染到 DOM 中它其實就是一個 a 鏈接
  • ?Routes:提供一個路由出口,組件內(nèi)部會存在多個內(nèi)置的 Route 組件,滿足條件的路由會被渲染到組件內(nèi)部(類比 router-view)
  • Route:用于定義路由路徑 path 和渲染組件 element 的對應(yīng)關(guān)系 [element:因為 react 體系內(nèi)把組件叫做 react element]

代碼示例

import { BrowserRouter, Routes, Route, Link } from 'react-router-dom'

function Home () {
  return (
    <p>這是首頁的內(nèi)容</p>
  )
}
function About () {
  return (
    <p>這是關(guān)于的內(nèi)容</p>
  )
}
function App () {
  return (
    // 聲明當前要用一個非hash模式的路由
    <BrowserRouter>
      <div className="App">
        {/* 指定跳轉(zhuǎn)的組件,to 用來配置路由地址 */}
        <Link to="/">首頁</Link><br />
        <Link to="/about">關(guān)于</Link>
        {/* 路由出口:路由對應(yīng)的組件會在這里進行渲染 */}
        <Routes>
          {/* 指定路由路徑和組件的對應(yīng)關(guān)系:path 代表路徑,element 代表對應(yīng)的組件,它們成對出現(xiàn) */}
          <Route path='/' element={<Home />}></Route>
          <Route path='/about' element={<About />}></Route>
        </Routes>
      </div>
    </BrowserRouter>
  )
}

export default App

編程式導航

注:上面使用 <Link to="/">跳轉(zhuǎn)</Link> 的方式是:聲明式導航

編程式導航: 通過 js 編程的方式進行路由頁面跳轉(zhuǎn),比如說從首頁跳轉(zhuǎn)到關(guān)于頁

實現(xiàn)步驟:

  1. 導入一個 useNavigate 鉤子函數(shù)
  2. 執(zhí)行 useNavigate 函數(shù) 得到 跳轉(zhuǎn)函數(shù)
  3. 在事件中執(zhí)行跳轉(zhuǎn)函數(shù)完成路由跳轉(zhuǎn)

示例代碼

// 導入useNavigate函數(shù)
import { useNavigate } from 'react-router-dom'
const Home = () => {
  // 執(zhí)行函數(shù)
  const navigate = useNavigate()
  return (
    <div>
      Home
      <button onClick={ ()=> navigate('/about') }> 跳轉(zhuǎn)關(guān)于頁 </button>
    </div>
  )
}

export default Home

注: 如果在跳轉(zhuǎn)時不想添加歷史記錄,可以添加額外參數(shù) replace 為 true

navigate('/about', { replace: true } )

路由傳參

跳轉(zhuǎn)路由的同時,很多時候都需要傳遞參數(shù),這里有兩種傳參方式:

1. searchParams傳參

路由傳參

    navigate('/?id=1001&name=zs', { replace: true })

路由取參

import { useSearchParams } from 'react-router-dom'
// 在Home中讀取頁面?zhèn)鬟f過來的參數(shù)(以路徑拼接的方式傳遞過來的參數(shù))
function Home () {
  const [params] = useSearchParams()
  // params 是一個對象,對象里有一個get方法用來獲取對應(yīng)的參數(shù)
  // 把參數(shù)的名稱作為get方法的實參傳遞即可
  const id = params.get('id')
  const name = params.get('name')
  return (
    <p>這是首頁的內(nèi)容,首頁獲取到的參數(shù)id:{id},name:{name}</p>
  )
}

2.params傳參

路由傳參

    navigate('/about/1002/lisi', { replace: true })

設(shè)置參數(shù)占位符

{/* 使用 params 傳參和接收參數(shù)時,指定路由路徑時需要提前使用“占位符”給參數(shù)進行占位 */}
<Route path='/about/:id/:name' element={<About />}></Route>

路由取參

import { useParams } from 'react-router-dom'
// 在關(guān)于頁面接收登錄頁使用 params 傳參的方式傳遞過來的參數(shù)
function About () {
  const params = useParams()
  return (
    <p>這是關(guān)于的內(nèi)容,接收到登錄頁傳遞過來的id為:{params.id},name為{params.name}</p>
  )
}

注:以上兩種路由傳參的方式各有優(yōu)劣,沒有說一定要使用哪一種,個人根據(jù)習慣使用即可。

嵌套路由

實現(xiàn)步驟:

  1. 在一級路由的 <Route></Route>定義嵌套路由聲明
  2. 在該一級路由組件內(nèi)部通過 <Outlet /> 指定二級路由出口

示例代碼

import { BrowserRouter, Routes, Route, Link, Outlet } from 'react-router-dom'
const Home = () => {
  return (
    <div>
      <p>首頁</p>
      <Link to='/'>to board</Link><br />
      <Link to='/artacle'>to artacle</Link><br />
      {/* 定義二級路由出口,嵌套的路由對應(yīng)組件將渲染到此處 */}
      <Outlet />
    </div>
  )
}
const Board = () => {
  return (
    <div>這是 Board 組件,這是默認顯示的二級組件</div>
  )
}
const Artacle = () => {
  return (
    <div>這是 Artacle 組件</div>
  )
}
function App () {
  return (
    <BrowserRouter>
      <div className="App">
        <Routes>
          {/* 一級路由 */}
          <Route path='/' element={<Home />}>
            {/* 在一級路由內(nèi)部嵌套二級路由 */}
            {/* 默認二級:添加 index 屬性,把它自己的 path 去掉即可 */}
            <Route index element={<Board />}></Route>
            {/* <Route path='board' element={<Board />}></Route> */}
            <Route path='artacle' element={<Artacle />}></Route>
          </Route>
        </Routes>
      </div>
    </BrowserRouter>
  )
}

export default App

注:默認二級路由:(見示例代碼)

實現(xiàn)步驟:

  1. 默認二級路由標記 index 屬性
  2. 把原本的路徑 path 屬性去掉

404路由配置

場景:當 url 的路徑在整個路由配置中都找不到對應(yīng)的 path ,使用404兜底組件進行渲染。

實現(xiàn)步驟:

  1. 準備一個 NotFound 組件(404的頁面)
  2. 把該組件的路由對應(yīng)關(guān)系配置為 Routes 內(nèi)部的一級路由,path='*'

示例代碼

import { BrowserRouter, Routes, Route } from 'react-router-dom'

// 定義 404 組件
const NotFound = () => {
  return (
    <h1>404  抱歉,頁面未找到TAT</h1>
  )
}
function App () {
  return (
    <BrowserRouter>
      <div className="App">
        <Routes>
          {/* 一級路由 */}
          {/* 當所有路徑都沒有匹配到時渲染此組件 作為兜底 */}
          <Route path='*' element={<NotFound />}></Route>
        </Routes>
      </div>
    </BrowserRouter>
  )
}

export default App

集中式路由配置

場景: 當我們需要路由權(quán)限控制點時候, 對路由數(shù)組做一些權(quán)限的篩選過濾,所謂的集中式路由配置就是用一個數(shù)組統(tǒng)一把所有的路由對應(yīng)關(guān)系寫好替換本來的 Roues 組件文章來源地址http://www.zghlxwxcb.cn/news/detail-431257.html

示例代碼

import { BrowserRouter, Routes, Route, useRoutes } from 'react-router-dom'

import Layout from './pages/Layout'
import Board from './pages/Board'
import Article from './pages/Article'
import NotFound from './pages/NotFound'

// 1. 準備一個路由數(shù)組 數(shù)組中定義所有的路由對應(yīng)關(guān)系
const routesList = [
  {
    path: '/',
    element: <Layout />,
    children: [
      {
        element: <Board />,
        index: true, // index設(shè)置為true 變成默認的二級路由
      },
      {
        path: 'article',
        element: <Article />,
      },
    ],
  },
  // 增加n個路由對應(yīng)關(guān)系
  {
    path: '*',
    element: <NotFound />,
  },
]

// 2. 使用useRoutes方法傳入routesList生成Routes組件
function WrapperRoutes() {
  let element = useRoutes(routesList)
  return element
}

function App() {
  return (
    <div className="App">
      <BrowserRouter>
        {/* 3. 替換之前的Routes組件 */}
        <WrapperRoutes />
      </BrowserRouter>
    </div>
  )
}

export default App

到了這里,關(guān)于React-路由 react-router-dom的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 【React】React-router路由

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

    2023年04月17日
    瀏覽(34)
  • 【React】react-router 路由詳解

    【React】react-router 路由詳解

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

    2024年02月01日
    瀏覽(23)
  • <React-Router>超全react路由知識點(跳轉(zhuǎn)、傳參、子路由、重定向等)

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

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

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

    探索React Router:實現(xiàn)動態(tài)二級路由

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

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

    React-Router路由基礎(chǔ)篇(簡單易學)

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

    2024年04月14日
    瀏覽(24)
  • React Router 中的路由導航方法:push() 和 replace() 詳解

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

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

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

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

    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ī)則匹配組件,顯示當前規(guī)則對應(yīng)的組件 exact = 精確匹配,只有當 path 和 pathname 完全匹配時才會展示該路由

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

    【React Router】React Router學習筆記

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

    2024年02月08日
    瀏覽(21)
  • react-router-domV6.21.1版本結(jié)合ant design mobile的TabBar標簽欄和Popup彈出層實現(xiàn)移動端路由配置

    react-router-domV6.21.1版本結(jié)合ant design mobile的TabBar標簽欄和Popup彈出層實現(xiàn)移動端路由配置

    react-router-dom在V6版本之后更換了很多的API名稱,在ant design mobile的TabBar配置中還是之前的舊版本,比如使用了 switch 組件等。我們在這里使用新版本的react-router-dom進行react移動端的配置 首先使用npm下載最新版的react-router-dom 然后在main.tsx文件中引入,并且使用MemoryRouter作為我們

    2024年01月25日
    瀏覽(102)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包