精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

React-Router v6新特性解讀及遷移指南

開發 前端
本文介紹了React-Router v6 新特性解讀和遷移指南 ,我們一起來了解以下吧。

[[319296]]

前言

18 年初,React Router的主要開發人員創建一個名為Reach Router的輕量級替代方案。

原來是相互抗衡的,卻沒想React Router直接拿來合并(真香!)

[[319297]]

目前 v6已是測試最后一版,估計新的特性不出意外就是下面這些了:

  1.  <Switch>重命名為<Routes>。
  2.  <Route>的新特性變更。
  3.  嵌套路由變得更簡單。
  4.  用useNavigate代替useHistory。
  5.  新鉤子useRoutes代替react-router-config。
  6.  大小減少:從20kb到8kb

1. <Switch>重命名為<Routes>

該頂級組件將被重命名。但是,其功能大部分保持不變(嗨,瞎折騰)。 

  1. // v5  
  2. <Switch>  
  3.     <Route exact path="/"><Home /></Route>  
  4.     <Route path="/profile"><Profile /></Route>  
  5. </Switch>  
  6. // v6  
  7. <Routes>  
  8.     <Route path="/" element={<Home />/>  
  9.     <Route path="profile/*" element={<Profile />/>  
  10. </Routes> 

2. <Route>的新特性變更

component/render被element替代

總而言之,簡而言之。就是變得更好用了。 

  1. import Profile from './Profile';  
  2. // v5  
  3. <Route path=":userId" component={Profile} />  
  4. <Route  
  5.   path=":userId"  
  6.   render={routeProps => (  
  7.     <Profile routeProps={routeProps} animate={true} />  
  8.   )}  
  9. />  
  10. // v6  
  11. <Route path=":userId" element={<Profile />/>  
  12. <Route path=":userId" element={<Profile animate={true} />/> 

3. 嵌套路由變得更簡單

具體變化有以下:

  •  <Route children> 已更改為接受子路由。
  •  比<Route exact>和<Route strict>更簡單的匹配規則。
  •  <Route path> 路徑層次更清晰。

3.1 簡化嵌套路由定義

v5中的嵌套路由必須非常明確定義,且要求在這些組件中包含許多字符串匹配邏輯(活久見啊,終于意識到這個問題了。)

[[319298]]

且看之前的處理: 

  1. // v5  
  2. import {  
  3.   BrowserRouter,  
  4.   Switch,  
  5.   Route,  
  6.   Link,  
  7.   useRouteMatch  
  8. } from 'react-router-dom';  
  9. function App() {  
  10.   return (  
  11.     <BrowserRouter>  
  12.       <Switch>  
  13.         <Route exact path="/" component={Home} />  
  14.         <Route path="/profile" component={Profile} />  
  15.       </Switch>  
  16.     </BrowserRouter>  
  17.   );  
  18.  
  19. function Profile() {  
  20.   let { path, url } = useRouteMatch();  
  21.   return (  
  22.     <div>  
  23.       <nav>  
  24.         <Link to={`${url}/me`}>My Profile</Link>  
  25.       </nav>  
  26.       <Switch>  
  27.         <Route path={`${path}/me`}>  
  28.           <MyProfile />  
  29.         </Route>  
  30.         <Route path={`${path}/:id`}>  
  31.           <OthersProfile />  
  32.         </Route>  
  33.       </Switch>  
  34.     </div>  
  35.   );  

而在v6中,你可以刪除字符串匹配邏輯。不需要任何useRouteMatch()! 

  1. // v6  
  2. import {  
  3.   BrowserRouter,  
  4.   Routes,  
  5.   Route,  
  6.   Link,  
  7.   Outlet  
  8. } from 'react-router-dom';  
  9. function App() {  
  10.   return (  
  11.     <BrowserRouter>  
  12.       <Routes>  
  13.         <Route path="/" element={<Home />/>  
  14.         <Route path="profile/*" element={<Profile/>/>  
  15.       </Routes>  
  16.     </BrowserRouter>  
  17.   );  
  18.  
  19. function Profile() {  
  20.   return (  
  21.     <div>  
  22.       <nav>  
  23.         <Link to="me">My Profile</Link>  
  24.       </nav>  
  25.       <Routes>  
  26.         <Route path="me" element={<MyProfile />/>  
  27.         <Route path=":id" element={<OthersProfile />/>  
  28.       </Routes>  
  29.     </div>  
  30.   );  

當然,還有更酸爽的操作,直接在路由里定義<Route>的<Route>,然后用接下來的一個新API:Outlet

3.2 新API:Outlet

這玩意兒,像極了{this.props.children},具體用法看以下例子: 

  1. function App() {  
  2.   return (  
  3.     <BrowserRouter>  
  4.       <Routes>  
  5.         <Route path="/" element={<Home />/>  
  6.         <Route path="profile" element={<Profile />}>  
  7.           <Route path=":id" element={<MyProfile />/>  
  8.           <Route path="me" element={<OthersProfile />/>  
  9.         </Route>  
  10.       </Routes>  
  11.     </BrowserRouter>  
  12.   );  
  13.  
  14. function Profile() {  
  15.   return (  
  16.     <div>  
  17.       <nav>  
  18.         <Link to="me">My Profile</Link>  
  19.       </nav>  
  20.         {/*  
  21.        將直接根據上面定義的不同路由參數,渲染<MyProfile /><OthersProfile />  
  22.         */}  
  23.       <Outlet />  
  24.     </div>  
  25.   )  

3.3 多個<Routes />

以前,我們只能 在React App中使用一個 Routes。但是現在我們可以在React App中使用多個路由,這將幫助我們基于不同的路由管理多個應用程序邏輯。 

  1. import React from 'react';  
  2. import { Routes, Route } from 'react-router-dom';  
  3. function Dashboard() {  
  4.   return (  
  5.     <div>  
  6.       <p>Look, more routes!</p>  
  7.       <Routes>  
  8.         <Route path="/" element={<DashboardGraphs />/>  
  9.         <Route path="invoices" element={<InvoiceList />/>  
  10.       </Routes>  
  11.     </div>  
  12.   );  
  13.  
  14. function App() {  
  15.   return (  
  16.     <Routes>  
  17.       <Route path="/" element={<Home />/>  
  18.       <Route path="dashboard/*" element={<Dashboard />/>  
  19.     </Routes>  
  20.   );  

4. 用useNavigate代替useHistory

從一目了然改到雙目失明。。。

總感覺React Router團隊有點兒戲。。。 

  1. // v5  
  2. import { useHistory } from 'react-router-dom';  
  3. function MyButton() {  
  4.   let history = useHistory();  
  5.   function handleClick() {  
  6.     history.push('/home');  
  7.   };  
  8.   return <button onClick={handleClick}>Submit</button> 
  9. }; 

現在,history.push()將替換為navigation(): 

  1. // v6  
  2. import { useNavigate } from 'react-router-dom';  
  3. function MyButton() {  
  4.   let navigate = useNavigate();  
  5.   function handleClick() {  
  6.     navigate('/home');  
  7.   };  
  8.   return <button onClick={handleClick}>Submit</button> 
  9. }; 

history的用法也將被替換成: 

  1. // v5  
  2. history.push('/home');  
  3. history.replace('/home');  
  4. // v6  
  5. navigate('/home');  
  6. navigate('/home', {replace: true}); 

[[319299]]

強行達成共識

5. 新鉤子useRoutes代替react-router-config。

感覺又是一波強行hooks,但還是相對于之前簡潔了一些。。。 

  1. function App() {  
  2.   let element = useRoutes([  
  3.     { path: '/', element: <Home /> },  
  4.     { path: 'dashboard', element: <Dashboard /> },  
  5.     { path: 'invoices',  
  6.       element: <Invoices /> 
  7.       children: [  
  8.         { path: ':id', element: <Invoice /> },  
  9.         { path: 'sent', element: <SentInvoices /> }  
  10.       ]  
  11.     },  
  12.     // 重定向  
  13.     { path: 'home', redirectTo: '/' },  
  14.     // 404找不到  
  15.     { path: '*', element: <NotFound /> }  
  16.   ]);  
  17.   return element;  

6. 大小減少:從20kb到8kb

React Router v6給我們帶來方便的同時,還把包減少了一半以上的體積。。。

感覺可以去看一波源碼了。。。

[[319300]]

7. 遷移及其它重要修復...

官方的遷移指南在這里:React Router v6 遷移指南

其實上面所列的新特性,基本就是遷移的全部內容了。

基礎的起手式就是更新包: 

  1. $ npm install react-router@6 react-router-dom@6  
  2. # or, for a React Native app  
  3. $ npm install react-router@6 react-router-native@6 

其中我覺得特別需要注意的一點是:React Router v6 使用簡化的路徑格,僅支持 2 種占位符:動態:id樣式參數和*通配符

以下都是 v6 中的有效路由路徑: 

  1. /groups  
  2. /groups/admin  
  3. /users/:id  
  4. /users/:id/messages  
  5. /files/*  
  6. /files/:id/*  
  7. /files-* 

使用RegExp正則匹配的路徑將無效: 

  1. /users/:id?  
  2. /tweets/:id(\d+)  
  3. /files/*/cat.jpg 

v6中的所有路徑匹配都將忽略 URL 上的尾部"/"。實際上,<Route strict>已被刪除并且在 v6 中無效。這并不意味著您不需要使用斜杠。

在v5版本之前的路徑,存在路由歧義

  1.  當前路徑:"/users",則<Link to="me">將跳轉<a href="/me">。
  2.  當前路徑:"/users/",則<Link to="me">將跳轉<a href="/users/me">。

React Router v6修復了這種歧義,取消了尾部"/":

  1.  當前路徑:"/users",則<Link to="me">將跳轉<a href="/users/me">。
  2.  當前路徑:"/users",則<Link to="../me">將跳轉<a href="/me">。

其形式更像命令行cd的用法: 

  1. // 當前路徑為 /app/dashboard  
  2.  
  3. <Link to="stats">               // <a href="/app/dashboard/stats">  
  4. <Link to="../stats">            // <a href="/app/stats">  
  5. <Link to="../../stats">         // <a href="/stats">  
  6. <Link to="../../../stats">      // <a href="/stats">  
  7. // 命令行當前路徑為 /app/dashboard  
  8. cd stats                        // pwd is /app/dashboard/stats  
  9. cd ../stats                     // pwd is /app/stats  
  10. cd ../../stats                  // pwd is /stats  
  11. cd ../../../stats               // pwd is /stats  

 

責任編輯:龐桂玉 來源: 前端大全
相關推薦

2022-08-15 17:34:22

react-routv6

2022-09-13 09:02:19

React客戶端服務端

2024-04-08 10:18:49

React前端TypeScript

2016-11-01 21:02:47

javascriptreact.jsreact-route

2016-10-31 11:26:13

ReactRedux前端應用

2021-11-01 19:49:55

React組件模式

2010-05-26 17:46:51

IPv6測試

2022-05-05 11:20:08

KubernetesDocker云計算

2022-12-25 10:53:47

2011-07-18 21:55:58

Phantom 掃描儀

2019-03-05 15:03:09

Android Q安卓系統功能

2023-03-15 07:29:54

開源數據湖

2010-05-13 08:57:22

jQuery 1.4

2022-08-29 15:30:46

TypeScript代碼

2009-06-16 11:23:00

InstrumentaJava SE 6新特

2021-07-19 07:55:24

多線程模型Redis

2021-03-06 08:10:16

Redis6 Java架構分布式框架

2009-06-16 11:24:00

HTTP增強Java SE 6新特

2010-06-30 09:05:02

Hyper-V遷移

2015-11-12 14:10:40

特性Fedora 23Workstation
點贊
收藏

51CTO技術棧公眾號

精品视频在线播放色网色视频| 国产亚洲欧美一区在线观看| 久久综合国产精品台湾中文娱乐网| 黄大色黄女片18第一次| 成人在线免费看片| 国产99精品国产| 7m第一福利500精品视频| 熟女人妻在线视频| 国产理论电影在线| 精品影院一区二区久久久| 日韩最新免费不卡| 色婷婷精品久久二区二区密| 亚洲天堂资源| 国产欧美在线观看一区| 91精品在线影院| 中文在线观看免费网站| 国产剧情在线观看一区| 91精品啪在线观看国产60岁| 水蜜桃色314在线观看| 激情小说 在线视频| 黄一区二区三区| 国语自产精品视频在线看抢先版图片| 无码人妻精品一区二区中文| 国产一区二区| 日韩欧美精品网站| 五月天综合婷婷| 四虎在线观看| 国产麻豆欧美日韩一区| 热re99久久精品国产66热| 黑人狂躁日本娇小| 先锋影音国产精品| 91精品欧美一区二区三区综合在 | 国产精品美女久久久久久久| 亚洲va欧美va国产综合剧情| 国产精品久久久久久99| 国产精品久久久久久久久久10秀 | 91国语精品自产拍在线观看性色| 亚洲精品乱码久久久久久久久久久久| 高清久久一区| 色综合婷婷久久| 国产人妻互换一区二区| 色中色在线视频| 国产在线精品一区在线观看麻豆| 97国产精品视频| 亚洲综合一二三区| 国产一区二区三区免费视频| √天堂资源在线| 少妇按摩一区二区三区| 欧美日韩国产中文字幕在线| 韩国av一区二区三区四区| 亚洲国产无码精品| 菠萝菠萝蜜在线视频免费观看| 99国内精品久久| 成人乱色短篇合集| 国产成人精品一区二区三区| 欧美 日韩 国产在线观看| 岛国在线视频免费看| 国产亚洲一区字幕| 欧美xxxx18性欧美| 一道本在线观看| 红杏成人性视频免费看| 91精品国产色综合久久久蜜香臀| 中文字幕视频在线免费观看| 激情av在线| 日本午夜免费一区二区| 精品一区二区久久久| 97激碰免费视频| 性欧美videos另类hd| 国产专区精品| 欧美色窝79yyyycom| koreanbj精品视频一区| 欧洲一区二区三区| 亚洲激情中文1区| 99精品一区二区三区的区别| 麻豆视频在线| 国产91精品入| 亚洲精品写真福利| 欧美亚洲精品日韩| 激情福利在线| 国产欧美精品一区二区色综合| 久久久99爱| 日本中文字幕电影在线观看| 日本中文在线观看| 可以看av的网站久久看| 欧美精品www| tube国产麻豆| 欧美日韩a区| 欧美日韩成人在线播放| 久久久美女视频| 日本国产在线| 日韩黄色免费网站| 国产精品a久久久久久| 探花视频在线观看| 在线观看不卡| 人体精品一二三区| a片在线免费观看| 韩国国内大量揄拍精品视频| 妖精视频一区二区| 看全色黄大色大片免费久久久| 亚洲精品在线免费观看视频| 91av在线免费| 欧美精选视频在线观看| 色狠狠久久aa北条麻妃| 91视频综合网| 亚洲一区二区三区高清不卡| 国产精品美女免费看| 国产情侣一区二区| 91在线视频观看| 伊人狠狠色丁香综合尤物| 欧美女同一区| 在线观看一区二区视频| 亚洲成人av免费观看| 亚洲a级精品| 久久久999国产精品| 国产中文字字幕乱码无限| 丝袜诱惑亚洲看片| 成人午夜在线观看| 四虎精品成人免费网站| 自拍偷自拍亚洲精品播放| 免费观看国产精品视频| 色香欲www7777综合网| 欧美丰满一区二区免费视频 | 超碰人人人人人人人| 欧美日本亚洲韩国国产| 日韩美女激情视频| 国产超碰人人模人人爽人人添| 91美女福利视频| 免费看黄色a级片| 欧美va视频| 精品粉嫩超白一线天av| 午夜国产福利视频| 国产美女一区| 高清国语自产拍免费一区二区三区| 久青青在线观看视频国产| 国产精品美女久久久久久2018 | 狠狠躁夜夜躁人人爽天天天天97 | 国产老妇另类xxxxx| 久久涩涩网站| 国内在线免费视频| 欧美视频日韩视频| 国产麻豆天美果冻无码视频 | 久久色视频免费观看| 亚洲第一综合网站| 日韩漫画puputoon| 精品亚洲一区二区三区在线播放 | 亚洲一区二区精品3399| 在线观看国产中文字幕| 国产成人精品999在线观看| 欧美极品少妇全裸体| 91亚洲国产成人精品一区| 国产午夜三级一区二区三| 霍思燕三级露全乳照| 一区二区三区在线资源| 久久成人av网站| 夜夜躁很很躁日日躁麻豆| 久久久久久麻豆| 日韩av片在线看| 色婷婷狠狠五月综合天色拍 | 欧美黄色直播| 国产激情在线播放| 亚洲国产精品高清久久久| 免费在线观看亚洲| 国产suv精品一区二区6| 看一级黄色录像| 国产精品99久久免费| 久久成人精品视频| www.97超碰| 亚洲综合成人在线| 2一3sex性hd| 国产精品videosex极品| 99蜜桃在线观看免费视频网站| 欧美黑人猛交| 亚洲福利视频在线| 国产精品黄色网| 99久久99久久精品免费观看| 免费看毛片的网址| 免费成人毛片| 久久久精品美女| 精品国产av一区二区三区| 一区二区日韩电影| 久久免费精品国产| 99国产精品| 欧美久久久久久| 成人在线黄色| 久久在精品线影院精品国产| h狠狠躁死你h高h| 亚洲午夜精品在线| 在线成人免费av| 女同性一区二区三区人了人一 | 尤物精品国产第一福利三区 | 91日韩在线视频| 尤物在线网址| 日韩激情av在线免费观看| 在线观看污污网站| 中文字幕一区二区三区精华液| 亚洲免费成人在线视频| 欧美视频导航| 欧美一区二区综合| 国产精品色婷婷在线观看| 欧美精品videofree1080p| 欧美 日韩 综合| 在线欧美日韩国产| 真实国产乱子伦对白在线| 92精品国产成人观看免费| 欧美一级特黄a| 在线中文一区| 欧美三级华人主播| 亚洲最大的免费视频网站| 久久久久久国产精品久久| 你懂的在线播放| 欧美美女一区二区| 日韩成人免费在线观看| 国产精品乱码妇女bbbb| 中文字幕人妻一区| 日日摸夜夜添夜夜添精品视频| 五月天综合婷婷| 美女亚洲一区| 亚洲自拍另类欧美丝袜| 免费观看亚洲| 久久久国产一区二区三区| 天天干视频在线观看| 欧美日韩国产a| 毛片视频网站在线观看| 亚洲国产高清在线观看视频| 最新版天堂资源在线| 久久99精品久久久久婷婷| 亚洲欧洲日产国码无码久久99| 91精品国产91久久久久久密臀 | 女同另类激情重口| 亚洲伊人第一页| 日韩电影免费观| 性欧美视频videos6一9| 欧美成年黄网站色视频| 国产婷婷色综合av蜜臀av| 亚洲国产精品久久久久爰性色| 欧美日韩在线三区| 亚洲精品男人的天堂| 亚洲成a人片综合在线| 999精品在线视频| 欧美国产在线观看| 久久国产精品影院| 国产麻豆成人传媒免费观看| 免费涩涩18网站入口| 性欧美videos另类喷潮| 美女扒开大腿让男人桶| 欧美成人自拍| 日韩激情视频| 国产一区二区三区站长工具| 欧美精品七区| 天堂一区二区三区四区| 国产嫩草一区二区三区在线观看 | 成人av影视在线| 精品一区二区三区中文字幕| 91精品在线看| 精品一区二区三区中文字幕视频| 国产精品一区久久久| 欧美在线va视频| 国产精品久久久久久久久久久新郎 | 日韩在线导航| 精品国产精品国产偷麻豆| 蜜桃麻豆91| 蜜桃一区二区三区| 免费成人av网站| 久久成人福利| 玛丽玛丽电影原版免费观看1977 | 久久九九全国免费| 日韩在线免费观看av| 久久女同精品一区二区| 李宗瑞91在线正在播放| 波多野结衣在线一区| 中文字幕欧美视频| 成人中文字幕合集| aaa黄色大片| 99久久国产综合精品麻豆| 免费观看一级一片| 久久久午夜电影| 一级特黄曰皮片视频| 中文字幕一区二区三区不卡| 黄色录像一级片| 亚洲午夜激情av| 在线观看国产亚洲| 91久久精品午夜一区二区| 中文字幕+乱码+中文| 777午夜精品免费视频| www.xxx国产| 亚洲免费高清视频| 77导航福利在线| 久久99久国产精品黄毛片入口| av在线最新| 国产精品6699| a一区二区三区亚洲| 国产日韩一区欧美| 久久悠悠精品综合网| 日韩欧美一区二区三区四区| 国产精品一在线观看| 国产盗摄视频在线观看| 日韩亚洲国产欧美| 中文字幕亚洲欧洲| 国产不卡一区视频| 91视频在线网站| 亚洲免费观看高清完整| 青青草成人av| 在线不卡中文字幕播放| 天天操天天操天天操| 中文字幕欧美日韩va免费视频| 一色桃子av在线| 日本午夜人人精品| 国产亚洲高清在线观看| 欧美男人的天堂| 欧美96在线丨欧| 成人一区二区三| 国产精品一区一区| 自拍偷拍视频亚洲| 一区二区欧美在线观看| www.av88| 欧美不卡123| 在线免费观看黄色网址| 96精品视频在线| 久久av网站| 午夜精品一区二区在线观看的 | 国产午夜亚洲精品午夜鲁丝片| www.色小姐com| 91久久精品一区二区三区| 免费观看成年人视频| 日韩视频欧美视频| 日韩在线影院| 精品国产乱码久久久久久蜜柚 | 91免费看国产| 欧美精品乱码| 国产视频一视频二| 国产精品一区二区你懂的| 国产高清一区二区三区四区| 一区二区三区美女| 国产精品久久久久久无人区| 亚洲欧美日韩精品久久亚洲区| 国产99re66在线视频| 国产欧美日韩精品在线观看| 亚洲宅男网av| 黄色大片中文字幕| 国产福利电影一区二区三区| 一本在线免费视频| 色婷婷综合久久久中文字幕| 亚洲精品综合久久| 久久大大胆人体| 天堂综合在线播放| 亚洲精品视频一二三| 日日夜夜精品视频天天综合网| 麻豆国产精品一区| 精品福利樱桃av导航| 日本高清视频www| 午夜精品一区二区三区在线视| 在线精品国产亚洲| 久久久一二三四| 久久精品国产久精国产爱| 美国美女黄色片| 国产精品久久久久精k8| 中文字幕永久在线| 日韩性生活视频| 国产精品久久久久久久久久辛辛| 久久久久久久久久久久久国产| 国产乱子伦视频一区二区三区| 免费在线黄色片| 亚洲精品视频免费在线观看| 成人天堂yy6080亚洲高清 | 欧美欧美全黄| 一级黄色片毛片| 在线一区二区视频| 在线免费观看黄| 波多野结衣精品久久| 性欧美xxxx大乳国产app| 在线免费观看视频| 在线不卡a资源高清| 色综合999| 欧美精品尤物在线| 极品美女销魂一区二区三区免费| 麻豆亚洲av成人无码久久精品| 日韩av综合中文字幕| 日韩av超清在线观看| 99精品视频网站| 99久久精品一区二区| 这里只有精品免费视频| 欧美日韩高清区| 国产一区二区区别| 亚洲高清在线不卡| 欧美日韩美女在线| 日本暖暖在线视频| 国产伦一区二区三区色一情| 日韩国产高清在线| 青娱乐免费在线视频| 亚洲欧美成人在线| 欧美三级一区| 18岁视频在线观看| 亚洲久草在线视频| 国产三级视频在线看| 999国产视频| 天堂va蜜桃一区二区三区漫画版| 黄色一级片在线免费观看| 在线播放国产精品| 黄色欧美在线| 在线观看中文av|