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

React筆記(六)React路由

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

一、React路由簡介

React 官方并沒有提供對應(yīng)的路由插件,因此,我們需要下載第三方的路由插件 —— React Router DOM。

React Router 在 2021 年 11 月份的時候更新 v6 的版本。本次課就主要講解V6版本

二、路由配置

1、下載路由

在項目根目錄中,通過以下命令

yarn add react-router-dom
2、路由配置

1)首先在react項目的入口文件index.js文件中,使用<BrowserRouter><App>包裹起來

import {BrowserRouter} from 'react-router-dom'
?
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
 ? ?<BrowserRouter>
 ? ? ? ?<App />
 ? ?</BrowserRouter> 
);

BrowserRouter:包裹這個應(yīng)用,一個React應(yīng)用只需使用一次

在 React Router 中提供了兩種路由模式:hash 和 history。

對應(yīng)的的路由組件分別是:

  • HashRouter:hash 模式的路由

  • BrowserRouter:history 模式的路由

實際使用時,任選其中一個模式引入即可

2)其次,在App.js文件中,使用<Routes>設(shè)置路由出口,使用<Route>指定導(dǎo)航鏈接

import React from 'react'
import {Routes,Route} from 'react-router-dom'
import Login from './pages/Login'
import Register from './pages/Register'
import Home from './pages/Home'
export default function App() {
 ?return (
 ? <Routes>
 ? ? <Route path='/login' element={<Login/>}></Route>
 ? ? <Route path='/register' element={<Register/>}></Route>
 ? ? <Route path='/' element={<Home/>}></Route>
 ? </Routes>
  )
}

核心組件作用說明

  • Routes:提供一個路由出口,滿足條件的路由組件會渲染到組件內(nèi)部

  • Route: 用于指定導(dǎo)航鏈接,完成路由跳轉(zhuǎn)

    • path:path屬性指定匹配的路徑地址

    • element element屬性指定要渲染的組件

三、路由跳轉(zhuǎn)

React Router 中,路由的跳轉(zhuǎn)分為兩種方式:

  • 標(biāo)簽(組件)跳轉(zhuǎn)

  • JS(API)跳轉(zhuǎn)

1、通過Link組件跳轉(zhuǎn)
import React from 'react'
import {Link} from 'react-router-dom'
export default function Login() {
 ?return (
 ? ?<div>
 ? ? ? ?<h1>用戶登錄</h1>
 ? ? ? ?<Link to="/register">沒有賬號,去注冊</Link>
 ? ?</div>
  )
}
2、編程式路由跳轉(zhuǎn)

實現(xiàn)步驟

  • 導(dǎo)入useNavigate鉤子函數(shù)

import {useNavigate} from 'react-router-dom'
  • 執(zhí)行鉤子函數(shù)得到跳轉(zhuǎn)函數(shù)

 let navigate=useNavigate();
  • 執(zhí)行跳轉(zhuǎn)函數(shù)完成跳轉(zhuǎn)

import React from 'react'
import {useNavigate} from 'react-router-dom'
?
export default function Register() {
 ?const navigate=useNavigate()
 ?const register=(e)=>{
 ? ?e.preventDefault()
 ? ?navigate('/login')
  }
 ?return (
 ? ?<div>
 ? ? ? ?<h1>用戶注冊</h1>
 ? ? ? ?<a href="#" onClick={(e)=>{register(e)}}>已注冊,去登錄</a>
 ? ?</div>
  )
}

注意

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

 const register=(e)=>{
 ? ?e.preventDefault()
 ? ?navigate('/login',{replace:true})
  }

四、嵌套路由

1、基礎(chǔ)配置

實現(xiàn)步驟

  • 定義嵌套路由聲明

 <Routes>
     <Route path='/login' element={<Login/>}></Route>
     <Route path='/register' element={<Register/>}></Route>
     <Route path='/' element={<Home/>}>
       <Route path='category' element={<Category/>}></Route>
       <Route path='goods' element={<Goods/>}></Route>
     </Route>
 </Routes>
  • 設(shè)置二級路由出口

export default function Home() {
    return (
        <>
          <aside>
              <ul>
                  <li><NavLink to="/categroy">分類管理</NavLink></li>
                  <li><NavLink to="/goods">商品管理</NavLink></li>
              </ul>
          </aside>
          <section>
                 {/* 二級路由出口 */}
                <Outlet></Outlet>
          </section>
        </>
    )
}
2、默認(rèn)二級路由設(shè)置
<Routes>
   <Route path='/login' element={<Login/>}></Route>
   <Route path='/register' element={<Register/>}></Route>
   <Route path='/' element={<Home/>}>
       {/*默認(rèn)二級路由,添加index屬性,刪除掉path屬性*/}
       <Route index element={<Main/>}></Route>
       <Route path='category' element={<Category/>}></Route>
       <Route path='goods' element={<Goods/>}></Route>
   </Route>
</Routes>
3、404頁配置

應(yīng)用場景:當(dāng)所有的路徑都沒有匹配的時候顯示

語法說明:在各級路由的最后添加*號路由作為兜底

<Routes>
    <Route path='/login' element={<Login/>}></Route>
    <Route path='/register' element={<Register/>}></Route>
    <Route path='/' element={<Home/>}>
       {/*默認(rèn)二級路由,添加index屬性,刪除掉path屬性*/}
       <Route index element={<Main/>}></Route>
       <Route path='category' element={<Category/>}></Route>
       <Route path='goods' element={<Goods/>}></Route>
     </Route>
     {/*當(dāng)所有路徑都沒有匹配時渲染此路由*/}
     <Route path='*' element={<NotFound/>}></Route>
</Routes>

五、路由模式

BrowserRouter模式部署在Nginx服務(wù)器上出現(xiàn)404問題的解決辦法

1、React打包
  • 在index.js的<BrowserRouter>上添加basename屬性,比如

<BrowserRouter basename='/crem'>
    <App></App> 
  </BrowserRouter>
  • 在package.json中添加"homepage": "."

{
     "homepage": "."
}
  • 在終端上執(zhí)行打包命令

yarn build
2、Nginx上部署
  • 打包后會產(chǎn)生一個build文件夾,然后將該文件改名為crem,

  • 上傳文件的linux服務(wù)器的/opt目錄下

  • 在/etc/nginx/conf.d/default.conf下添加如下配置

 location /crem {
     alias /opt/crem;
     index index.html;
 }
  • 進(jìn)入shell中執(zhí)行如下命令

ps aux|grep nginx  #查看nginx進(jìn)程
killall -9 nginx   #殺死nginx進(jìn)程
/usr/sbin/nginx    #啟動nginx服務(wù)器
3、防止404的配置
  • 修改/etc/nginx/conf.d/default.conf文件,添加如下配置即可

 location /crem {
     alias /opt/crem;
     index index.html;
     try_files $uri /crem/index.html;
 }

六、路由傳參

1、searchParams傳參

實現(xiàn)步驟

  • 傳參

import {useNavigate} from 'react-router-dom'
export default function CategroyList() {
  let navigate=useNavigate();
  return (
    <div>
        <h2>CategroyList</h2>
        <button onClick={()=>{navigate('/categroyDetail?id=12')}}>詳情</button>
    </div>
  )
}
  • 獲取參數(shù)

import {useSearchParams} from 'react-router-dom'

export default function CategoryDetail() {
  let [params]=useSearchParams()
  return (
    <div>
        <h2>CategroyDetail</h2>
        <div>
            ID:{params.get('id')}
        </div>
    </div>
  )
}
2、params傳參

實現(xiàn)步驟

  • 路由設(shè)置

 <BrowserRouter>
     <Routes>
        <Route path='/home' element={<Layout/>}>
           <Route path='categroy-detail/:id' element={<CategoryDetail/>}></Route>
         </Route>
      </Routes>
 </BrowserRouter>
  • 傳參

import {useNavigate} from 'react-router-dom'
export default function CategroyList() {
  let navigate=useNavigate();
  return (
    <div>
        <h2>CategroyList</h2>
        <button onClick={()=>{navigate('/home/categroy-detail/13')}}>詳情</button>
    </div>
  )
}
  • 獲取參數(shù)

import React from 'react'
import {useParams} from 'react-router-dom'

export default function CategoryDetail() {
  let params=useParams()
  return (
    <div>
        <h2>CategroyDetail</h2>
        <div>
            ID:{params.id}
        </div>
    </div>
  )
}

七、集中式路由渲染

實現(xiàn)步驟

  • 在項目根目錄創(chuàng)建router文件夾,并在該目錄下創(chuàng)建index.jsx

  • 在router/index.jsx編寫路由配置項

import Login from '../pages/Login'
import Register from '../pages/Register'
import Home from '../pages/Home'
import CategoryList from '../pages/Category'
import CategoryDetail from '../pages/Category/Detail'
import GoodsList from '../pages/Goods'
import Main from '../pages/Home/Main'
export default [
    {
        path:'/login',
        element:<Login/>
    },
    {
        path:'/register',
        element:<Register/>
    },
    {
        path:'/',
        element:<Home/>,
        children:[
            {
                index:true,
                element:<Main/>
            },
            {
                path:'/categoryList',
                element:<CategoryList/>
            },
            {
                path:'/categoryDetail/:id',
                element:<CategoryDetail/>
            },
            {
                path:'/goodsList',
                element:<GoodsList/>
            }
        ]
    }
]
  • 在App.jsx中通過useRoutes鉤子函數(shù)來進(jìn)行集中式配置

import {useRoutes} from 'react-router-dom'
import router from './router/index'
function App() {
  return useRoutes(router)
}
export default App;
  • 在項目根目錄下的index.js中使用<BrowserRouter>包裹<App>

root.render(
    <BrowserRouter>
        <App/>
    </BrowserRouter>
)

八、路由懶加載

1、實現(xiàn)步驟
  • 使用lazy(()=>import('xxx'))方式導(dǎo)入組件

import {lazy} from 'react'
const Login=lazy(()=>import('../pages/Login'))
const Register=lazy(()=>import('../pages/Register'))
const Home=lazy(()=>import('../pages/Home'))
const CategoryList=lazy(()=>import('../pages/Category'))
const CategoryDetail=lazy(()=>import('../pages/Category/Detail'))
const GoodsList=lazy(()=>import('../pages/Goods'))
const Main=lazy(()=>import('../pages/Home/Main'))
export default [
    {
        path:'/login',
        element:<Login/>
    },
    {
        path:'/register',
        element:<Register/>
    },
    {
        path:'/',
        element:<Home/>,
        children:[
            {
                index:true,
                element:<Main/>
            },
            {
                path:'/categoryList',
                element:<CategoryList/>
            },
            {
                path:'/categoryDetail/:id',
                element:<CategoryDetail/>
            },
            {
                path:'/goodsList',
                element:<GoodsList/>
            }
        ]
    }
]
  • 通過 React 中提供了 <Suspense> 組件,來實現(xiàn)路由的懶加載。

import {Suspense} from 'react'
function App() {
  return(
    <Suspense fallback={<>loading</>}>
      {useRoutes(router)}
    </Suspense>
  )
}

<Suspense> 組件身上,必須設(shè)置一個 fallback 屬性,屬性值可以是一個 HTML 標(biāo)簽,也可以是一個自定義的組件。用于當(dāng)路由組件還未加載出來前的提示。

2、解決路由閃屏

配置完路由懶加載后出現(xiàn)當(dāng)進(jìn)行路由跳轉(zhuǎn)時,出現(xiàn)閃屏現(xiàn)象,要向解決這個問題可以使用 react-loadable插件進(jìn)行解決

  • 先下載react-loadable依賴包

yarn add react-loadable
  • 建立一個loadable.js,放在src/utils/loadable.js

import Loadable from 'react-loadable';
export default function withLoadable(comp) {
    return Loadable({
    	//懶加載組件頁面
        loader: comp,
        loading: () => null,
        delay: "",
    })
}
  • 修改router/index.js文章來源地址http://www.zghlxwxcb.cn/news/detail-694479.html

import loadable from '../utils/loadable'
const Login=loadable(()=>import('../pages/Login'))
const Register=loadable(()=>import('../pages/Register'))
const Home=loadable(()=>import('../pages/Home'))
const CategoryList=loadable(()=>import('../pages/Category'))
const CategoryDetail=loadable(()=>import('../pages/Category/Detail'))
const GoodsList=loadable(()=>import('../pages/Goods'))
const Main=loadable(()=>import('../pages/Home/Main'))
export default [
    {
        path:'/login',
        element:<Login/>
    },
    {
        path:'/register',
        element:<Register/>
    },
    {
        path:'/',
        element:<Home/>,
        children:[
            {
                index:true,
                element:<Main/>
            },
            {
                path:'/categoryList',
                element:<CategoryList/>
            },
            {
                path:'/categoryDetail/:id',
                element:<CategoryDetail/>
            },
            {
                path:'/goodsList',
                element:<GoodsList/>
            }
        ]
    }
]

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

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

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

相關(guān)文章

  • Node.js npm V8 React Express的運(yùn)行配合關(guān)系:構(gòu)建JavaScript應(yīng)用的基石

    目錄 Node.js 和 V8 引擎 Node.js 和 npm LTS(Long Term Support) React Node.js的作用 Express Node.js 和 V8 引擎 Node.js 使用 Google 的 V8 JavaScript 引擎 來執(zhí)行 JavaScript 代碼。V8 是一個高性能的 JavaScript 和 WebAssembly 引擎,用于在 Google Chrome 瀏覽器和 Node.js 中運(yùn)行 JavaScript。 V8 引擎的更新 通常包括

    2024年03月12日
    瀏覽(19)
  • ?? 筆記 | react-transition-group 實現(xiàn)路由切換過渡動畫

    React 18 React router v6 React Transition Group 是一個 React 庫,專門用于在 React 應(yīng)用中管理和處理過渡動畫效果。這個庫提供了一組組件,包括 Transition、CSSTransition、SwitchTransition 和 TransitionGroup,幫助在組件的進(jìn)入和退出時應(yīng)用動畫效果。 Transition 是一個與平臺無關(guān)的組件,通常結(jié)合

    2024年03月09日
    瀏覽(26)
  • React學(xué)習(xí)筆記(番外一)——video.js視頻播放組件的入門及排坑經(jīng)歷

    React學(xué)習(xí)筆記(番外一)——video.js視頻播放組件的入門及排坑經(jīng)歷

    很久沒有靜下心寫博客了。近段時間接到一個任務(wù),前端頁面要加上視頻播放功能。實現(xiàn)加排坑前后花了三天時間(別問我問什么這么久??),覺得還是有必要記錄一下的。 這一部分有必要寫在最前面,避免你看了一長串安裝、引入、代碼,然后發(fā)現(xiàn)自己想要播放的視頻格

    2024年02月02日
    瀏覽(27)
  • 0604嵌套路由與路由傳參-react路由-react

    0604嵌套路由與路由傳參-react路由-react

    1.1 使用 示例效果如下圖1.1-1所示: 該示例代碼其他部分和上一篇相同,這里主要講解下嵌套路由的使用。 分析:home組件中嵌套了News和Message兩個路由組件。 創(chuàng)建News組件 在原項目結(jié)構(gòu)Home文件夾下創(chuàng)建News/index.jsx 源代碼1.1-1如下所示 創(chuàng)建Message組件 Home文件夾下創(chuàng)建Message/ind

    2024年02月06日
    瀏覽(21)
  • react基礎(chǔ)-React原理揭秘&React路由基礎(chǔ)

    react基礎(chǔ)-React原理揭秘&React路由基礎(chǔ)

    能夠說出React組件的更新機(jī)制 能夠?qū)M件進(jìn)行性能優(yōu)化 能夠說出虛擬DOM和DIff算法 setState() 的兩個作用 修改state 更新組件 過程:父組件重新渲染時,也會重新渲染子組件,但只會渲染當(dāng)前組件子樹(當(dāng)前組件以其所有子組件) 減輕state 減輕state:只存儲跟組件渲染相關(guān)的數(shù)據(jù)

    2024年02月12日
    瀏覽(14)
  • 0601概述-react路由-react

    0601概述-react路由-react

    1.1 簡述 單頁面應(yīng)用和多頁面應(yīng)用是兩種不同的 Web 應(yīng)用程序架構(gòu)。 單頁面應(yīng)用(SPA)是指在一個 HTML 頁面中動態(tài)加載和渲染所有的應(yīng)用程序內(nèi)容,通過前端 JavaScript 操作來實現(xiàn)頁面的變化和交互。SPA 不需要每次請求新的 HTML 頁面,因此可以提供更快的響應(yīng)速度和更好的用戶

    2023年04月23日
    瀏覽(23)
  • 【React 】react 中的路由鑒權(quán)與路由攔截

    在 React 中, 路由攔截 和 路由鑒權(quán) 是兩個相關(guān)但不完全相同的概念。 1 路由攔截 路由攔截(Route Interception)**是指在用戶導(dǎo)航到某個路由之前,通過某種邏輯來攔截、檢查或修改導(dǎo)航行為。**它可以用于實現(xiàn)權(quán)限控制、身份驗證、頁面加載前的準(zhǔn)備工作等場景。在路由攔截中

    2024年02月10日
    瀏覽(16)
  • 【React】React-router路由

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

    2023年04月17日
    瀏覽(34)
  • JavaScript之React

    前言 React 是一個用于構(gòu)建用戶界面的 JavaScript 庫,由 Facebook 開發(fā)。它可以讓開發(fā)者編寫可重復(fù)使用的 UI 組件,并且可以自動地更新 UI。React 的運(yùn)行原理可以分為兩個部分:虛擬 DOM 和組件更新。 虛擬 DOM React 使用虛擬 DOM 來代表實際的 DOM 樹。虛擬 DOM 是一個輕量級的 JavaSc

    2024年02月06日
    瀏覽(28)
  • 【React】react-router 路由詳解

    【React】react-router 路由詳解

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

    2024年02月01日
    瀏覽(23)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包