欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

react-routerV6版本和V5版本的詳細(xì)對比

 更新時間:2023年12月24日 16:41:47   作者:idiot_MAN  
React-Router5是React-Router6的前一個版本,它已經(jīng)被React-Router6取代,React-Router 6是一次較大的重大更新,本文就來介紹一下react-routerV6版本和V5版本的詳細(xì)對比,感興趣的可以了解一下

react-routerV6版本和V5版本的區(qū)別

  • 包大小的不同 V5 大小在20.8k左右,壓縮后在7.3k左右;V6 大小在10.8k左右,壓縮后在3.8k左右
  • Route 特性變更
    • path 當(dāng)前頁面對應(yīng)的URL地址
    • element 路由匹配時,渲染哪個組件 ;替代了V5里的component和render
  • Routes替代了Switch
  • 嵌套路由更簡單
  • useNavigate替代了useHistory
  • 移除了activeClassName
  • 鉤子useRoutes替代了react-router-config

詳細(xì)對比:

1、版本的安裝

  • 安裝V5版本
npm i react-router-dom@5
  • 安裝V6版本
npm i react-router-dom

2、在index.js中從react-router-dom中引入 BrowserRouter或HashRouter

  • V5和V6都一樣
// 將引入的BrowserRouter模塊取一個別名 叫做Router
import { BrowserRouter as Router } from 'react-router-dom'

3、將根組件包裹起來

  • 在V5中將App根組件用Router組件包裹起來
root.render(
  <React.StrictMode>
    {/* 將App組件用Router包裹起來 */}
    <Router>
      <App />
    </Router>
  </React.StrictMode>
)
  • 在V6中要先引入MRoute 代替App根組件 Router組件包裹起來
import React from 'react'
import { BrowserRouter as Router } from 'react-router-dom'
// 引入路由表
import MRoute from './router'

export default function App() {
  return (
    <Router>
      <MRoute />
    </Router>
  )
}

4、設(shè)置路由路徑

  • 在V5中通過Route模塊的path屬性和component屬性設(shè)置路徑和組件的對應(yīng)關(guān)系
 <Route path="/home" component={Home}></Route>
 <Route path="/course" component={Course}></Route>
  • 在V6中通過Route模塊的path屬性和element屬性設(shè)置路徑和組件的對應(yīng)關(guān)系
<Route path="/home" element={<Home />}></Route>
<Route path="/course" element={<Course />}></Route>

5、在app.js組件中,將路由表包裹起來

  • 在V5中用Switch組件將路由表包裹起來
import { Route, Switch } from 'react-router-dom'
<Switch>
	 <Route path="/home" component={Home}></Route>
 	<Route path="/course" component={Course}></Route>
</Switch>
  • 在V6中用Routes組件將路由表包裹起來
import { Route, Routes } from 'react-router-dom'
<Routes>
	 <Route path="/home" element={<Home />}></Route>
	<Route path="/course" element={<Course />}></Route>
</Routes>

6、路由重定向

在V5中我們希望一進(jìn)入頁面就可以訪問到/home頁面,使用Redirect模塊

  • 在V6中有兩種方法進(jìn)行路由重定向

    • React-routerV6版本中已經(jīng)沒有了Redirect組件,使用Navigate組件替代Redirect模塊

      import { Routes, Route, Navigate } from 'react-router-dom'
      // Routes替代了Switch
          <Routes>
            {/* element替代了component */}
            <Route path="/home" element={<Home />}></Route>
            <Route path="/course" element={<Course />}></Route>
            {/* 路由重定向 */}
            <Route path="/" element={<Navigate to="/home" />}></Route>
          </Routes>
      
    • 第二種:自定義Redirect組件

      import { useEffect } from 'react'
      import { useNavigate } from 'react-router-dom'
      
      export default function Redirect(props) {
        const navigate = useNavigate()
        useEffect(() => {
          // replace: true 代表的是要替換掉之前的頁面
          navigate(props.to, { replace: true })
        })
        return null
      }
      
      
      <Routes>
            {/* element替代了component */}
            <Route path="/home" element={<Home />}></Route>
            <Route path="/course" element={<Course />}></Route>
            {/* 路由重定向 */}
            <Route path="/" element={<Redirect to="/home" />}></Route>
      
      </Routes>
      

7,聲明式導(dǎo)航

  • 在V5中當(dāng)我們希望給當(dāng)前的路由添加一個樣式的時候,我們可以使用NavLink模塊來代替Link模塊,給NavLink添加activeClassName屬性,屬性名為class名,在樣式中定義active樣式

        <div id="app">
            {/* 路由跳轉(zhuǎn)*/}
            <NavLink activeClassName="active" to="/home"> 首頁</NavLink>
            <NavLink activeClassName="active" to="/course">課程</NavLink>
    
            {/* 路由出口 */}
            <Route path="/home" component={Home}></Route>
            <Route path="/course" component={Course}></Route>
          </div>
    
  • 在V6中NavLink組件會自動給當(dāng)前的匹配到的路由NavLink添加一個class名為active,要實(shí)現(xiàn)高亮效果設(shè)置active樣式

    <Router>
          <NavLink to="/home">首頁</NavLink>
          <NavLink to="/course">課程</NavLink>
          <hr />
          <MRoute />
    </Router>

8、編程式導(dǎo)航

  • 在V5中使用js進(jìn)行跳轉(zhuǎn)

    export default class NotFound extends Component {
      render() {
        return (
          <div>
            <button onClick={this.handleClick}>點(diǎn)擊去課程</button>
            <button onClick={() => this.props.history.goBack()}>返回</button>
          </div>
        )
      }
      handleClick = () => {
        console.log(this.props)
        this.props.history.push('/course')
      }
    }
    

    history對象的常用方法

    • push路由跳轉(zhuǎn),push里面?zhèn)鬟f的參數(shù)和NavLink中的to屬性的參數(shù)是一樣的
    • go(num) 前進(jìn)或后退num級
    • goBack() go(-1) 后退一級
    • goForward() go(1) 前進(jìn)一級
  • 在V6中使用useNavigate這個鉤子 可以通過js的方式實(shí)現(xiàn)跳轉(zhuǎn)

    import React from 'react'
    import { useNavigate } from 'react-router-dom'
    
    export default function Home() {
      // 使用useNavigate這個鉤子 可以通過js的方式實(shí)現(xiàn)跳轉(zhuǎn)
      const navigate = useNavigate()
      return (
        <div>
          <div>Home</div>
          <button onClick={() => navigate('/course')}>去課程</button>
        </div>
      )
    }
    

9、嵌套路由(二級路由)

  • 在V5中需要在那個路由下面嵌套路由,就直接去所需嵌套路由的路由頁面里面去創(chuàng)建所需要的路由

    //App.js
    export default class App extends PureComponent {
      render() {
        return (
          <div id="app">
            {/* 路由跳轉(zhuǎn)*/}
            <NavLink activeClassName="active" to="/home">
              首頁
            </NavLink>
            <NavLink activeClassName="active" to="/news">
              新聞
            </NavLink>
            <NavLink activeClassName="active" to="/course">
              課程
            </NavLink>
    
            <Switch>
              <Route path="/home" component={Home}></Route>
              <Route path="/course" component={Course}></Route>
              <Route path="/news" component={News}></Route>
              <Redirect from="/" to="/home" exact></Redirect>
              <Route component={NotFound}></Route>
            </Switch>
          </div>
        )
      }
    }
    
    //二級路由頁面
    import { Component } from 'react'
    import { NavLink, Redirect, Route, Switch } from 'react-router-dom'
    import JsCourse from './course/JsCourse'
    import VueCourse from './course/VueCourse'
    import ReactCourse from './course/ReactCourse'
    export default class Course extends Component {
      render() {
        return (
          <div>
            <h1>Course</h1>
            <hr />
            <NavLink activeClassName="active" to="/course/js">
              js課程
            </NavLink>
            <NavLink activeClassName="active" to="/course/vue">
              vue課程
            </NavLink>
            <NavLink activeClassName="active" to="/course/react">
              react課程
            </NavLink>
    
            <Switch>
              <Route path="/course/js" component={JsCourse}></Route>
              <Route path="/course/vue" component={VueCourse}></Route>
              <Route path="/course/react" component={ReactCourse}></Route>
              <Redirect from="/course" to="/course/js"></Redirect>
            </Switch>
          </div>
        )
      }
    }
    
    
  • 在V6中需要在那個路由下面嵌套路由,就直接在該路由里面直接寫路由組件直接寫所需要嵌套的路由,在二級路由里面通過Outlet組件實(shí)現(xiàn)嵌套路由的視圖顯示

    import React from 'react'
    
    import { Routes, Route, Navigate } from 'react-router-dom'
    
    import Home from '../Home'
    import Course from '../Course'
    
    import Redirect from '../Redirect'
    import NotFound from '../NotFound'
    
    import JsCourse from '../JsCourse'
    import VueCourse from '../VueCourse'
    import ReactCourse from '../ReactCourse'
    
    export default function MRoute() {
      return (
        // Routes替代了Switch
        <Routes>
          {/* element替代了component */}
          <Route path="/home" element={<Home />}></Route>
          <Route path="/course" element={<Course />}>
            {/* 嵌套路由 */}
            {/* index匹配到的父路徑 */}
            <Route index element={<Redirect to="/course/js" />}></Route>
            <Route path="js" element={<JsCourse />}></Route>
            <Route path="vue" element={<VueCourse />}></Route>
            <Route path="react" element={<ReactCourse />}></Route>
          </Route>
          {/* 路由重定向 */}
          <Route path="/" element={<Redirect to="/home" />}></Route>
          {/* 404頁面 */}
          <Route path="*" element={<NotFound />}></Route>
        </Routes>
      )
    }
    
    
    import React from 'react'
    
    import { NavLink, Outlet } from 'react-router-dom'
    
    export default function Course() {
      return (
        <div>
          <NavLink to="/course/js">js課程</NavLink>
          <NavLink to="/course/vue">vue課程</NavLink>
          <NavLink to="/course/react">react課程</NavLink>
          <hr />
          <Outlet />
        </div>
      )
    }
    

10、路由傳參

  • query形式傳參

    • 在V5中query方式傳遞的參數(shù)不需要在注冊路由的時候聲明

      <Route path="/details" component={Details}></Route>
      
      this.props.location.search.split('=')[1]
      
    • 在V6中通過useSearchParams鉤子函數(shù)來獲取query形式的參數(shù)

      searchparams.get(‘id’) 獲取路由參數(shù)的值
      searchparams.has(‘id’) 判斷參數(shù)是否存在

      setSearchParams({‘id’:45}) 在當(dāng)前頁面修改路由參數(shù)的值

      import React from 'react'
      import { useSearchParams } from 'react-router-dom'
      
      export default function News() {
        // 通過useSearchParams鉤子函數(shù)來獲取query形式的參數(shù)
        const [searchparams, setSearchParams] = useSearchParams()
        return <div>News{searchparams.get('id')}</div>
      }
      
      
  • params方式

    • 在V5中 在組件中獲取params方式傳遞參數(shù)

       const { id } = this.props.match.params
      
    • 在V6中通過useParams 接收params傳遞的參數(shù)

      import React from 'react'
      
      import { useParams } from 'react-router-dom'
      
      export default function NewsDetail() {
        // 通過useParams 接收params傳遞的參數(shù)
        const params = useParams()
        return <div>NewsDetail{params.id}</div>
      }
      

11、路由懶加載

  • 在V6中增加了useRoutes鉤子將路由轉(zhuǎn)成配置文件

    • LazyLoad組件封裝
    import React, { lazy, Suspense } from 'react'
    
    export default function LazyLoad(path) {
      const Element = lazy(() => import(`./${path}`))
      return (
        <Suspense>
          <Element />
        </Suspense>
      )
    }
    
    • 使用useRoutes鉤子將路由轉(zhuǎn)成配置文件

      import React, { Suspense } from 'react'
      import { useRoutes } from 'react-router-dom'
      import LazyLoad from '../LazyLoad'
      import Redirect from '../Redirect'
      
      export default function MRoute() {
        const element = useRoutes([
          {
            path: '/',
            element: <Redirect to="/home"></Redirect>,
          },
          {
            path: '/course',
            element: LazyLoad('Course'),
            children: [
              {
                path: 'js',
                element: LazyLoad('JsCourse'),
              },
             ......
            ],
          },
          {
            path: '/news',
            element: LazyLoad('News'),
          },
          {
            path: '/newsdetail/:id',
            element: LazyLoad('NewsDetail'),
          },
          { path: '*', element: LazyLoad('NotFound') },
        ])
      
        return element
      }

到此這篇關(guān)于react-routerV6版本和V5版本的詳細(xì)對比的文章就介紹到這了,更多相關(guān)react-router版本對比內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • React+Electron快速創(chuàng)建并打包成桌面應(yīng)用的實(shí)例代碼

    React+Electron快速創(chuàng)建并打包成桌面應(yīng)用的實(shí)例代碼

    這篇文章主要介紹了React+Electron快速創(chuàng)建并打包成桌面應(yīng)用,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-12-12
  • 每天一個hooks學(xué)習(xí)之useUnmount

    每天一個hooks學(xué)習(xí)之useUnmount

    這篇文章主要為大家介紹了每天一個hooks學(xué)習(xí)之useUnmount,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • React18?useState何時執(zhí)行更新及微任務(wù)理解

    React18?useState何時執(zhí)行更新及微任務(wù)理解

    這篇文章主要為大家介紹了React18?useState何時執(zhí)行更新及微任務(wù)理解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • 使用react遍歷對象生成dom

    使用react遍歷對象生成dom

    這篇文章主要介紹了使用react遍歷對象生成dom問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • React源碼分析之useCallback與useMemo及useContext詳解

    React源碼分析之useCallback與useMemo及useContext詳解

    這篇文章主要介紹了React useCallback與useMemo及useContext源碼分析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2022-11-11
  • 詳解React中如何拆分組件

    詳解React中如何拆分組件

    這篇文章主要為大家詳細(xì)介紹了React中拆分組件的相關(guān)知識,文中的示例代碼講解詳細(xì),對我們掌握React有一定的幫助,需要的小伙伴可以參考一下
    2023-12-12
  • React?Flux與Redux設(shè)計(jì)及使用原理

    React?Flux與Redux設(shè)計(jì)及使用原理

    這篇文章主要介紹了React?Flux與Redux設(shè)計(jì)及使用,Redux最主要是用作應(yīng)用狀態(tài)的管理。簡言之,Redux用一個單獨(dú)的常量狀態(tài)樹(state對象)保存這一整個應(yīng)用的狀態(tài),這個對象不能直接被改變
    2023-03-03
  • React條件渲染實(shí)例講解使用

    React條件渲染實(shí)例講解使用

    在React中,你可以創(chuàng)建不同的組件來封裝各種你需要的行為。然后還可以根據(jù)應(yīng)用的狀態(tài)變化只渲染其中的一部分。React 中的條件渲染和JavaScript中的一致,使用JavaScript操作符if或條件運(yùn)算符來創(chuàng)建表示當(dāng)前狀態(tài)的元素,然后讓React根據(jù)它們來更新UI
    2022-11-11
  • React如何創(chuàng)建組件

    React如何創(chuàng)建組件

    本文我們將介紹 React中組件的類別,以及如何創(chuàng)建和使用組件。具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • React 的調(diào)和算法Diffing 算法策略詳解

    React 的調(diào)和算法Diffing 算法策略詳解

    React的調(diào)和算法,主要發(fā)生在render階段,調(diào)和算法并不是一個特定的算法函數(shù),而是指在調(diào)和過程中,為提高構(gòu)建workInProcess樹的性能,以及Dom樹更新的性能,而采用的一種策略,又稱diffing算法
    2021-12-12

最新評論