最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

React中的路由嵌套和手動(dòng)實(shí)現(xiàn)路由跳轉(zhuǎn)的方式詳解

 更新時(shí)間:2022年11月03日 11:07:34   作者:藍(lán)桉cyq  
這篇文章主要介紹了React中的路由嵌套和手動(dòng)實(shí)現(xiàn)路由跳轉(zhuǎn)的方式,手動(dòng)路由的跳轉(zhuǎn),主要是通過Link或者NavLink進(jìn)行跳轉(zhuǎn)的,實(shí)際上我們也可以通JavaScript代碼進(jìn)行跳轉(zhuǎn),需要的朋友可以參考下

React的路由嵌套

接上一篇文章, 在上一篇文章中講解了路由的基本介紹, 我再來介紹一下路由的其他用法

在開發(fā)中,路由之間是存在嵌套關(guān)系的。

這里我們假設(shè)Home頁面中還有兩個(gè)頁面內(nèi)容:

推薦列表和排行榜列表;

點(diǎn)擊不同的鏈接可以跳轉(zhuǎn)到不同的地方,顯示不同的內(nèi)容;

<Routes>
  <Route path='/' element={<Navigate to="/home"/>}></Route>
  
  {/* 配置二級(jí)路由 */}
  <Route path='/home' element={<Home/>}>
    <Route path='/home' element={<Navigate to="/home/recommend"/>}/>
    <Route path='/home/recommend' element={<HomeRecommend/>}/>
    <Route path='/home/ranking' element={<HomeRanking/>}/>
  </Route>
  
  <Route path='/about' element={<About/>}/>
  <Route path='/profile' element={<Profile/>}/>
  <Route path='*' element={<Notfound/>}/>
</Routes>

<Outlet>組件用于在父路由元素中作為子路由的占位元素, 也就是子路由的展示位置(必須寫)。

// home組件

import { Link, Outlet } from 'react-router-dom'

export class Home extends PureComponent {
  render() {
    return (
      <div>
        <h2>Home</h2>
        <Link to="/home/recommend">推薦</Link>
        <Link to="/home/ranking">排行</Link>
        <Outlet/>
      </div>
    )
  }
}

手動(dòng)路由的跳轉(zhuǎn)

目前我們實(shí)現(xiàn)的跳轉(zhuǎn)主要是通過Link或者NavLink進(jìn)行跳轉(zhuǎn)的,實(shí)際上我們也可以通JavaScript代碼進(jìn)行跳轉(zhuǎn)。

Link或者NavLink渲染出來是一個(gè)a元素, 如果我們想點(diǎn)擊一個(gè)button或者其他元素實(shí)現(xiàn)頁面跳轉(zhuǎn), 就需要通過JavaScript代碼進(jìn)行跳轉(zhuǎn)了

我們知道Navigate組件是可以進(jìn)行路由的跳轉(zhuǎn)的,但是依然是組件的方式。

如果我們希望通過JavaScript代碼邏輯進(jìn)行跳轉(zhuǎn)(比如點(diǎn)擊了一個(gè)button),那么就需要獲取到navigate對(duì)象。

在Router6.x版本之后,代碼類的API都遷移到了hooks的寫法:

如果我們希望進(jìn)行代碼跳轉(zhuǎn),需要通過useNavigate的Hook獲取到navigate對(duì)象進(jìn)行操作, hook只能在函數(shù)組件中使用(這里了解一下, 后面文章會(huì)有專門詳細(xì)講解hook的);

那么如果是一個(gè)函數(shù)式組件,我們可以直接調(diào)用它提供的hooks的寫法,但是如果是一個(gè)類組件呢?

  • Router6.x確實(shí)是沒有提供類組件的API, 如果我們確實(shí)想要在類組件中使用, 需要再使用高階組件對(duì)類組件進(jìn)行增強(qiáng)(通過高階組件增強(qiáng)向類組件中傳入navigate)
  • 如果是Router5.x, 是有提供withRouter這樣一個(gè)高階組件的, 但是Router6.x中, 我們需要自己實(shí)現(xiàn)這樣的高階組件
  • 封裝高階函數(shù)方法如下, 由于其他地方也可能使用高階組件, 所以我是在一個(gè)單獨(dú)的文件中進(jìn)行封裝
import { useNavigate } from "react-router-dom"

// 封裝高階組件
export default function withRouter(WrapperComponent) {
  return function(props) {
    // 在函數(shù)組件中通過hook拿到navigate對(duì)象
    const naviagte = useNavigate()
    // 將獲取到的navigate放到一個(gè)對(duì)象中
    const router = {naviagte}

    return <WrapperComponent {...props} router={router} />
  }
}

這樣我們引入自己封裝的高階組件, 通過高階組件的增強(qiáng), 就可以在類組件的props中獲取到navigate

export class App extends PureComponent {
  navigateTo(path) {
    // 經(jīng)過高階組件增強(qiáng)的組件中, 可以在props中拿到navigate
    const { naviagte } = this.props.router
    // 調(diào)用navigate
    naviagte(path)
  }

  render() {
    return (
      <div className='app'>
        <div className='header'>
          <Link to="/home">首頁</Link>
          <Link to="/about">關(guān)于</Link>
          <Link to="/profile">我的</Link>

          {/* 發(fā)生點(diǎn)擊事件時(shí), 將路勁傳遞過去 */}
          <button onClick={() => this.navigateTo("/category")}>分類</button>
          <span onClick={() => this.navigateTo("/order")}>訂單</span>
        </div>

        <div className='counter'>
          <Routes>
            {/* 當(dāng)默認(rèn)路徑 / 時(shí), 重定向到home頁面 */}
            <Route path='/' element={<Navigate to="/home"/>}></Route>
            {/* 配置二級(jí)路由 */}
            <Route path='/home' element={<Home/>}>
              <Route path='/home' element={<Navigate to="/home/recommend"/>}/>
              <Route path='/home/recommend' element={<HomeRecommend/>}/>
              <Route path='home/ranking' element={<HomeRanking/>}/>
            </Route>
            <Route path='/about' element={<About/>}/>
            <Route path='/profile' element={<Profile/>}/>
            <Route path='/category' element={<Category/>}/>
            <Route path='/order' element={<Order/>}/>
            {/* 當(dāng)上面路徑都沒有匹配到時(shí), 顯式Notfound組件 */}
            <Route path='*' element={<Notfound/>}/>
          </Routes>
        </div>

        <div className='footer'>footer</div>
      </div>
    )
  }
}

// 使用高階組件對(duì)App組件進(jìn)行增強(qiáng)
export default withRouter(App)

到此這篇關(guān)于React中的路由嵌套和手動(dòng)實(shí)現(xiàn)路由跳轉(zhuǎn)的方式的文章就介紹到這了,更多相關(guān)react路由嵌套和路由跳轉(zhuǎn)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • React三大屬性之Refs的使用詳解

    React三大屬性之Refs的使用詳解

    這篇文章主要介紹了React三大屬性之Refs的使用詳解,幫助大家更好的理解和學(xué)習(xí)使用React,感興趣的朋友可以了解下
    2021-04-04
  • React根據(jù)當(dāng)前頁面路由進(jìn)行自動(dòng)高亮示例代碼

    React根據(jù)當(dāng)前頁面路由進(jìn)行自動(dòng)高亮示例代碼

    要根據(jù)當(dāng)前頁面路由自動(dòng)高亮頂部菜單項(xiàng),可以使用 React Router 的 useLocation 鉤子來獲取當(dāng)前路徑,并根據(jù)路徑動(dòng)態(tài)設(shè)置菜單項(xiàng)的高亮效果,本文給大家介紹了一個(gè)完整的示例,展示如何根據(jù)當(dāng)前頁面路由自動(dòng)高亮頂部菜單項(xiàng),需要的朋友可以參考下
    2024-07-07
  • 使用Axios在React中請(qǐng)求數(shù)據(jù)的方法詳解

    使用Axios在React中請(qǐng)求數(shù)據(jù)的方法詳解

    這篇文章主要給大家介紹了初學(xué)React,如何規(guī)范的在react中請(qǐng)求數(shù)據(jù),主要介紹了使用axios進(jìn)行簡(jiǎn)單的數(shù)據(jù)獲取,加入狀態(tài)變量,優(yōu)化交互體驗(yàn),自定義hook進(jìn)行數(shù)據(jù)獲取和使用useReducer改造請(qǐng)求,本文主要適合于剛接觸React的初學(xué)者以及不知道如何規(guī)范的在React中獲取數(shù)據(jù)的人
    2023-09-09
  • React報(bào)錯(cuò)Element type is invalid解決案例

    React報(bào)錯(cuò)Element type is invalid解決案例

    這篇文章主要為大家介紹了React報(bào)錯(cuò)Element type is invalid解決案例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • Rust中Trait的使用

    Rust中Trait的使用

    在Rust中,Trait是一個(gè)核心概念,它允許我們定義類型應(yīng)該具有的行為,本文就來具體介紹一下Rust中Trait的使用,感興趣的可以了解一下,感興趣可以了解一下
    2024-03-03
  • 詳解React 代碼共享最佳實(shí)踐方式

    詳解React 代碼共享最佳實(shí)踐方式

    這篇文章主要介紹了React 代碼共享最佳實(shí)踐方式,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-05-05
  • 詳解React中組件之間通信的方式

    詳解React中組件之間通信的方式

    這篇文章主要介紹了React中組件之間通信的方式,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-07-07
  • react中監(jiān)聽props的改變方式

    react中監(jiān)聽props的改變方式

    這篇文章主要介紹了react中監(jiān)聽props的改變方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • react setupProxy.js導(dǎo)致項(xiàng)目無法啟動(dòng)的解決

    react setupProxy.js導(dǎo)致項(xiàng)目無法啟動(dòng)的解決

    這篇文章主要介紹了react setupProxy.js導(dǎo)致項(xiàng)目無法啟動(dòng)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • react hooks實(shí)現(xiàn)原理解析

    react hooks實(shí)現(xiàn)原理解析

    這篇文章主要介紹了react hooks實(shí)現(xiàn)原理,文中給大家介紹了useState dispatch 函數(shù)如何與其使用的 Function Component 進(jìn)行綁定,節(jié)后實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-10-10

最新評(píng)論

互助| 凌云县| 西平县| 常德市| 苏尼特左旗| 关岭| 如皋市| 铁岭市| 灵璧县| 诸城市| 东明县| 从江县| 综艺| 绥芬河市| 潜江市| 黄石市| 利津县| 如东县| 车险| 吉木乃县| 收藏| 礼泉县| 革吉县| 海丰县| 南宁市| 罗山县| 中牟县| 和林格尔县| 兴国县| 富裕县| 河曲县| 芒康县| 曲阜市| 新绛县| 安龙县| 铜山县| 绥中县| 西昌市| 鄂伦春自治旗| 桐柏县| 缙云县|