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

React-Router6版本的更新引起的路由用法變化

 更新時(shí)間:2022年01月18日 15:34:36   作者:鋒享前端  
本文主要介紹了React-Router6版本的更新引起的路由用法變化,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

React Router應(yīng)該是React生態(tài)系統(tǒng)中最受歡迎的庫(kù)了,npm周下載量達(dá)600w+,github也有45.2k的加星,足以說(shuō)明它是一款非常優(yōu)秀的庫(kù),作為React社區(qū)重要的庫(kù),它經(jīng)歷了多次迭代和重大更改,就在上個(gè)月,更是迎來(lái)了一個(gè)大的正式版更新6.x,當(dāng)前最新為6.0.2,相對(duì)比于之前的5.x版本做出了較大改變,不管從用法還是從性能上都有了明顯的提升,本文也將用新老版本對(duì)比的方式讓你能以最快的速度上手新用法

話(huà)不多說(shuō),先列出6.0做出的改變之處:

  1. 用法變化
  2. 替換為
  3. 嵌套路由新寫(xiě)法
  4. 推出全新hook,全面擁抱函數(shù)組件
  5. 基于對(duì)象的路由,實(shí)現(xiàn)js配置所有路由
  6. 整體代碼比上個(gè)版本減小大約70%

用法變化

組件變化較大,移除了component與render屬性,使用element屬性替代,因?yàn)榕c之前的版本代碼寫(xiě)法不能兼容,寫(xiě)法區(qū)別如下 

 ?// 5.x用法
? ?<Route path="/home" component={Home} />
? ?<Route path="/login" render={()=><Login/>}/>

? ?// 6.x用法
? ?<Route path="/home" element={<Home/>} />
? ?<Route path="/login" component={<Login/>} />

替換為

v6版本移除了 組件,并使用替換,除了能替代 組件的功能外,也做了一些改變,比如所有的都必須包裹在中,否則拋出錯(cuò)誤

?// 5.x用法
? ?<Switch>
? ? ? ?<Route path="/home" component={Home} />
? ? ? ?<Route path="/login" component={Login} />
? ?</Switch>

? ?// 6.x用法
? ? <Routes>
? ? ? ?<Route path="/home" element={<Home/>} />
? ? ? ?<Route path="/login" component={<Login/>} />
? ?</Routes>

嵌套路由

v6版本的react-router支持多種嵌套路由寫(xiě)法,寫(xiě)法分別如下:

第一種寫(xiě)法:延續(xù)v5版本寫(xiě)法,保持原有組件結(jié)構(gòu) 這種寫(xiě)法比較適合重構(gòu)的項(xiàng)目,不需要改變太多的代碼便能過(guò)渡到v6版本

? // App.jsx
? ?<Routes>
? ? ? ?<Route path="/home" element={<Home/>} />
? ? ? ?<Route path="/user/*" element={<User/>} />
? ?</Routes>

? ?// User.jsx
? ?<Routes>
? ? ? ?<Route path="profile" element={<UserProfile/>} />
? ? ? ?<Route path=":/id" element={<UserDetail/>} />
? ?</Routes>

雖然組件結(jié)構(gòu)與v5版本一至,但寫(xiě)法上有一定的差異,父組件App.jsx中的path屬性最后必須使用星號(hào)(path="/user/*"),子組件User.jsx中的路徑都是相對(duì)于其父級(jí)路徑,所以不需要像v5版本那樣寫(xiě)全整個(gè)路徑,媽媽再也不用擔(dān)心我會(huì)寫(xiě)錯(cuò)地址。

另外,如果中的path屬性不以/開(kāi)頭,則是相對(duì)于其父級(jí)路徑,這樣的好處是使嵌套路由實(shí)現(xiàn)變得更加簡(jiǎn)單,并易于組合復(fù)雜的路由和布局

第二種寫(xiě)法:把所有的寫(xiě)在一起,配合實(shí)現(xiàn)路由組件的顯示

?// App.jsx
? ?<Routes>
? ? ? ?<Route path="/home" element={<Home/>} />
? ? ? ?<Route path="/user" element={<User/>}>
? ? ? ? ? ?<Route path="profile" element={<UserProfile/>} />
? ? ? ? ? ?<Route path=":/id" element={<UserDetail/>} />
? ? ? ?</Route>
? ?</Routes>

? ?// User.jsx
? ?<Outlet/>

這樣寫(xiě)法讓我們能更清晰地去了解路由結(jié)構(gòu),能更好地管理我們的路由,而能讓我們能更精確地把嵌套的路由組件布局到需要位置顯示

第三種寫(xiě)法:使用useRoutes()實(shí)現(xiàn)路由配置

使用useRoutes配置路由與配置路由效果一致,只是這種寫(xiě)法使用javascript生成路由,不依賴(lài)JSX,返回相應(yīng)結(jié)構(gòu)的路由組件樹(shù),有木有感覺(jué)回到了VueRouter?有木有?

 function App(){
       // 以下寫(xiě)法與第二種寫(xiě)法效果一至
       const element = useRoutes([
          {path:'/home',element:<Home/>},
          {
               path:'/user',
               element:<User/>,
               children:[
                  {path:'profile',element:<UserProfile/>},
                  {path:':/id',element:<UserDetail/>},
              ]
          }
      ])
       return element
  }

以上三種寫(xiě)法各有各的優(yōu)點(diǎn),開(kāi)發(fā)者可以根據(jù)自身的需求選擇一種來(lái)實(shí)現(xiàn)你的嵌套路由

重定向

新版本的react-router移除了組件,但可以使用新增的組件配合組件實(shí)現(xiàn)重定向效果

<Routes>
? ? ? ?<Route path="/home" element={<Home/>} />
? ? ? ?<Route path="/" element={<Navigate to="/home"/>}>
? ?</Routes>

路由跳轉(zhuǎn)

路由配置好后免不了要進(jìn)行頁(yè)面跳轉(zhuǎn),但新版的react-router移除了history對(duì)象,故不能使用v5版本的history(包括useHistory hook)已不能使用,我們可以使用以下兩中方式進(jìn)行跳轉(zhuǎn)

使用或進(jìn)行跳轉(zhuǎn)這種方式與上一個(gè)版本幾乎沒(méi)有太大的區(qū)別,唯一的區(qū)別是組件的高亮寫(xiě)法發(fā)生了變化

   // v5版本
   <NavLink to="/home" activeStyle={{color:'#f00'}}>首頁(yè)</NavLink>
   <NavLink to="/home" activeClassName="active">首頁(yè)</NavLink>

   // v6版本
   <NavLink to="/home" style={({isActive})=>(isActive?{color:'#f00'}:{})}>首頁(yè)</NavLink>
   <NavLink to="/home" className={({isActive})=>isActive?'current':''}>首頁(yè)</NavLink>

PS: 默認(rèn)已經(jīng)有一個(gè)高亮的active類(lèi),可以直接使用,不需要額外設(shè)置
使用useNavigate()進(jìn)行跳轉(zhuǎn)有時(shí)候我們并不能使用以上兩個(gè)組件進(jìn)行跳轉(zhuǎn),如根據(jù)ajax請(qǐng)求返回值跳轉(zhuǎn)不同的頁(yè)面,這時(shí)我們就得使用js的方式時(shí)行跳轉(zhuǎn)了,雖然新版的react-router已經(jīng)移除掉history對(duì)象,但給我們提供了 useNavigate hook實(shí)現(xiàn)路由跳轉(zhuǎn),使用方法如下

?import { useNavigate } from "react-router-dom";
? ?let navigate = useNavigate();
? ?navigate(`/home`);

? ?// 跳轉(zhuǎn)且不保留瀏覽記錄
? ?navigate(`/home`,{replace:true});

? ?// 返回上一頁(yè)
? ?navigate(-1)

? ?// 對(duì)象方式跳轉(zhuǎn)
? ?navigate({
? ? ? ?pathname:'/home'
? })

需要注意一點(diǎn)就是,在v6版本的react-router中,如果跳轉(zhuǎn)的路徑如果不是以/開(kāi)頭,則為相對(duì)路徑,相對(duì)于其父級(jí)路由路徑,這樣的設(shè)置能讓我們更好的控制跳轉(zhuǎn)

路由傳參

我們都知道,在進(jìn)行路由跳轉(zhuǎn)時(shí),可以附帶一些參數(shù)一起傳遞到跳轉(zhuǎn)頁(yè)面,新版的react-router已經(jīng)從props中移除了history、location、match,也移除掉了withRouter高階組件,所以無(wú)法使用老版本的方式傳參與接收,新版用法如下

search傳參

?let navigate = useNavigate();
? ?navigate(`/home?page=1&size=10`);
? ?navigate({
? ? ? ?pathname:'/home',
? ? ? ?search:'page=1&size=10'
? });

在對(duì)應(yīng)組件接收參數(shù)也很簡(jiǎn)單,使用useSearchParams hook進(jìn)行接收,得到URLSearchParams對(duì)象以及設(shè)置search參數(shù)函數(shù)組成的數(shù)據(jù)

? ?function Home(){
? ? ? ?const [searchParams,setSearchParams] = useSearchParams()
? ? ? ?searchParams.get('page');//1
? ? ? ?searchParams.get('size');//10
? ? ? ?return (
? ? ? ? ? ?<div>首頁(yè)</div>
? ? ? )
? }

動(dòng)態(tài)路由傳參

   <Route path="/user" element={<User/>}>
       <Route path=":/id" element={<UserDetail/>} />
   </Route>

配置完以上路由后,當(dāng)頁(yè)面跳轉(zhuǎn)到/user/123這個(gè)路徑時(shí),可以在組件中使用useParams hook獲取123這個(gè)id

function UserDetail(){
       const {id} = useParams()
       return (
           <div>id:{id}</div>
      )
  }

state傳參通過(guò)、或 useNavigate進(jìn)行跳轉(zhuǎn)時(shí),都可以傳遞state參數(shù),用法如下:

 <Link to="/home" state={{idx:1,key:'qf'}}>首頁(yè)</Link>
   navigate('/home',{state:{idx:1,key:'qf'}})

在首頁(yè)組件中通過(guò)useLocation hook獲取state值

 function Home(){
       const {state} = useLocation();
       state.idx; // 1
       state.key; // qf
       return (
           <div>首頁(yè)</div>
      )
  }

其他

另外,React路由同樣支持SSR服務(wù)端渲染等其它功能,由于篇幅在限,在此不做過(guò)多說(shuō)明,感興趣的小伙伴請(qǐng)繼續(xù)關(guān)注我,后續(xù)的寫(xiě)文章專(zhuān)門(mén)介紹react-router在在服務(wù)端的用法。

總結(jié)

以上就是本文的所有內(nèi)容,希望通過(guò)該文章能讓大家對(duì)新版本react-router有個(gè)全面的認(rèn)識(shí),以便在項(xiàng)目中應(yīng)用新版路由。更多相關(guān)React-Router6路由內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • ReactJS中不同類(lèi)型的狀態(tài)詳解

    ReactJS中不同類(lèi)型的狀態(tài)詳解

    這篇文章主要為大家介紹了ReactJS中不同類(lèi)型的狀態(tài)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • React+ts實(shí)現(xiàn)二級(jí)聯(lián)動(dòng)效果

    React+ts實(shí)現(xiàn)二級(jí)聯(lián)動(dòng)效果

    這篇文章主要為大家詳細(xì)介紹了React+ts實(shí)現(xiàn)二級(jí)聯(lián)動(dòng)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • React實(shí)現(xiàn)生成和導(dǎo)出Word文檔的方法詳解

    React實(shí)現(xiàn)生成和導(dǎo)出Word文檔的方法詳解

    React是一個(gè)流行的JavaScript庫(kù),用于構(gòu)建現(xiàn)代前端應(yīng)用程序,本文將深入探討如何在React中生成和導(dǎo)出Word文檔,感興趣的小伙伴可以學(xué)習(xí)一下
    2023-09-09
  • 深入理解react-router 路由的實(shí)現(xiàn)原理

    深入理解react-router 路由的實(shí)現(xiàn)原理

    這篇文章主要介紹了深入理解react-router 路由的實(shí)現(xiàn)原理,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-09-09
  • React Native使用fetch實(shí)現(xiàn)圖片上傳的示例代碼

    React Native使用fetch實(shí)現(xiàn)圖片上傳的示例代碼

    本篇文章主要介紹了React Native使用fetch實(shí)現(xiàn)圖片上傳的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-03-03
  • React Native 資源包拆分實(shí)戰(zhàn)分析

    React Native 資源包拆分實(shí)戰(zhàn)分析

    這篇文章主要為大家介紹了React Native 資源包拆分實(shí)戰(zhàn)分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • JavaScript中React面向組件編程(上)

    JavaScript中React面向組件編程(上)

    本文主要介紹了React組件中默認(rèn)封裝了很多屬性,有的是提供給開(kāi)發(fā)者操作的,其中有三個(gè)屬性非常重要:state、props、refs。感興趣的小伙伴可以參考閱讀
    2023-03-03
  • react實(shí)現(xiàn)列表滾動(dòng)組件功能

    react實(shí)現(xiàn)列表滾動(dòng)組件功能

    在開(kāi)發(fā)項(xiàng)目的時(shí)候,從服務(wù)端獲取到數(shù)據(jù)列表后,展示給用戶(hù)看,需要實(shí)現(xiàn)數(shù)據(jù)自動(dòng)滾動(dòng)效果,怎么實(shí)現(xiàn)呢,下面小編給大家分享react實(shí)現(xiàn)列表滾動(dòng)組件功能實(shí)現(xiàn)代碼,感興趣的朋友一起看看吧
    2023-09-09
  • react性能優(yōu)化useMemo與useCallback使用對(duì)比詳解

    react性能優(yōu)化useMemo與useCallback使用對(duì)比詳解

    這篇文章主要為大家介紹了react性能優(yōu)化useMemo與useCallback使用對(duì)比詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • 解讀useState第二個(gè)參數(shù)的"第二個(gè)參數(shù)"

    解讀useState第二個(gè)參數(shù)的"第二個(gè)參數(shù)"

    這篇文章主要介紹了useState第二個(gè)參數(shù)的"第二個(gè)參數(shù)",具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03

最新評(píng)論