React Router v4 入坑指南
這篇文章主要介紹了React Router v4 入坑指南(小結),小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟著小編過來看看吧
距離React Router v4 正式發布也已經過去三個月了,這週把一個React的架子做了升級,之前的路由用的還是v2.7.0版的,所以決定把路由也升級下,剛好「嚐嚐鮮」...
江湖傳言,目前官方同時維護2.x 和4.x 兩個版本。 (ヾ(。ꏿ﹏ꏿ)ノ゙咦,此刻相信機智如我的你也會發現,ReactRouter v3 去哪兒了?整丟了??巴拉出鍋了????解釋!依照規劃,沒有歷史包袱的新專案想要使用穩定版的 ReactRouter 時,應該使用 ReactRouter 3.x。目前 3.x 版本也還處於 beta 階段,不過會先於 4.x 版本正式發布。如果你已經在使用 2.x 的版本,那麼升級 3.x 將不會有任何額外的程式碼變更。
禮貌性簡介下
#React Router V4 相較於前面三個版本有根本性變化,首先是遵循Just Component 的API 設計理念,其次API方面也精簡了不少,對新手來說降低了學習難度,但如果是對先前專案的重構,嗯,簡直無**可說。本升級的主要特點如下:
聲明式(Declarative)
可組合(Composability)
- ##React Router V4 遵循了React 的理念:
- 萬物皆組件
。因此 升級之後的 Route、Link、Switch等都是一個普通的元件。
React Router V4 基於 Lerna 管理多個 Repository。在此程式碼庫包括: - react-router React Router 核心
- react-router-dom 用於DOM 綁定的React Router
react-router-native 用於React Native 的React Router
react-router-redux React Router 和Redux 的整合
react-router-config 靜態路由設定幫助助手
#外掛程式初引入
##通常我們在React 的使用中,一般要引入兩個包,
react 和
react-dom ,那麼
react-router
react-router-dom#是不是兩個都要引用呢? 注意,前方高能,入門第一坑就在這裡
。他們兩個只要引用一個就行了,不同之處就是後者比前者多出了<Link> 這樣的 DOM 類別元件。因此我們只要引用
react-router-dom 這個套件就OK了。當然,如果搭配
redux ,你還需要使用
react-router-redux 。
主要元件簡介
<Route>、
- 。 **不同的是
是用來保持與 location 的同步。 **範例如下:是用來保持與 store 的更新,而
-
// 示例1 <Router> <p> <ul> <li><Link to="/">首页</Link></li> <li><Link to="/about">关于</Link></li> <li><Link to="/topics">主题列表</Link></li> </ul> <hr/> <Route exact path="/" component={Home}/> <Route path="/about" component={About}/> <Route path="/topics" component={Topics}/> </p> </Router>
登入後複製Router是所有路由元件共用的底層接口,一般我們的應用並不會使用這個接口,而是使用高級的路由:
:使用HTML5 提供的history API 來保持UI 和URL 的同步;
:使用URL 的hash (例如:window.location.hash) 來保持UI 和URL 的同步;
:能在記憶體中保存你「URL」的歷史紀錄(並沒有對位址列讀寫);< MemoryRouter>
<Router> <ul> <li><Link to="/">首页</Link></li> <li><Link to="/about">关于</Link></li> <li><Link to="/topics">主题列表</Link></li> </ul> <hr/> <Route exact path="/" component={Home}/> <Route path="/about" component={About}/> <Route path="/topics" component={Topics}/> </Router>
### 爸爸的保護下,會報如下異常訊息:###
我们知道,Route组件主要的作用就是当一个location匹配路由的path时,渲染某些UI。示例如下:
<Router> <p> <Route exact path="/" component={Home}/> <Route path="/news" component={NewsFeed}/> </p> </Router> // 如果应用的地址是/,那么相应的UI会类似这个样子: <p> <Home/> </p> // 如果应用的地址是/news,那么相应的UI就会成为这个样子: <p> <NewsFeed/> </p>
<Route>
组件有如下属性:
path(string): 路由匹配路径。(没有path属性的Route 总是会 匹配);
exact(bool):为true时,则要求路径与location.pathname必须完全匹配;
strict(bool):true的时候,有结尾斜线的路径只能匹配有斜线的location.pathname;
再次奉上两个鲜活的例子:
exact配置:
路径 | location.pathname | exact | 是否匹配 |
---|---|---|---|
/one | /one/two | true | 否 |
/one | /one/two | false | 是 |
strict配置:
路径 | location.pathname | strict | 是否匹配 |
---|---|---|---|
/one/ | /one | true | 否 |
/one/ | /one/ | true | 是 |
/one/ | /one/two | true | 是 |
同时,新版的路由为 <Route>
提供了三种渲染内容的方法:
<Route component>
:在地址匹配的时候React的组件才会被渲染,route props也会随着一起被渲染;<Route render>
:这种方式对于内联渲染和包装组件却不引起意料之外的重新挂载特别方便;<Route children>
:与render属性的工作方式基本一样,除了它是不管地址匹配与否都会被调用;
第一种方式没啥可说的,和之前一样,这里我们重点看下 <Route render>
的渲染方式:
// 行内渲染示例 <Route path="/home" render={() => <p>Home</p>}/> // 包装/合成 const FadingRoute = ({ component: Component, ...rest }) => ( <Route {...rest} render={props => ( <FadeIn> <Component {...props}/> </FadeIn> )}/> ) <FadingRoute path="/cool" component={Something}/>
TIPS: 第三坑! <Route component>
的优先级要比 <Route render>
高,所以不要在同一个 <Route>
中同时使用这两个属性。
和之前版本没太大区别,重点看下组件属性:
to(string/object):要跳转的路径或地址;
replace(bool): 为 true 时 ,点击链接后将使用新地址替换掉访问历史记录里面的原地址; 为 false 时 ,点击链接后将在原有访问历史记录的基础上添加一个新的纪录。 默认为 false ;
示例如下:
// Link组件示例 // to为string <Link to="/about">关于</Link> // to为obj <Link to={{ pathname: '/courses', search: '?sort=name', hash: '#the-hash', state: { fromDashboard: true } }}/> // replace <Link to="/courses" replace />
<NavLink>
是 <Link>
的一个特定版本, 会在匹配上当前 URL 的时候会给已经渲染的元素添加样式参数,组件属性:
activeClassName(string):设置选中样式,默认值为 active;
activeStyle(object):当元素被选中时, 为此元素添加样式;
exact(bool):为 true 时, 只有当地址完全匹配 class 和 style 才会应用;
strict(bool):为 true 时,在确定位置是否与当前 URL 匹配时,将考虑位置 pathname 后的斜线; isActive(func):判断链接是否激活的额外逻辑的功能;
从这里我们也可以看出,新版本的路由在组件化上面确实下了不少功夫,来看看NavLink的使用示例:
// activeClassName选中时样式为selected <NavLink to="/faq" activeClassName="selected" >FAQs</NavLink> // 选中时样式为activeStyle的样式设置 <NavLink to="/faq" activeStyle={{ fontWeight: 'bold', color: 'red' }} >FAQs</NavLink> // 当event id为奇数的时候,激活链接 const oddEvent = (match, location) => { if (!match) { return false } const eventID = parseInt(match.params.eventID) return !isNaN(eventID) && eventID % 2 === 1 } <NavLink to="/events/123" isActive={oddEvent} >Event 123</NavLink>
该组件用来渲染匹配地址的第一个 <Route>
或者 <Redirect>
。那么它与使用一堆route又有什么区别呢?
<Switch>
的独特之处是独它仅仅渲染一个路由。相反地,每一个包含匹配地址(location)的 <Route>
都会被渲染。思考下面的代码:
<Route path="/about" component={About}/> <Route path="/:user" component={User}/> <Route component={NoMatch}/>
如果现在的URL是 /about
,那么 <About>
, <User>
, 还有 <NoMatch>
都会被渲染,因为它们都与路径(path)匹配。这种设计,允许我们以多种方式将多个 <Route>
组合到我们的应用程序中,例如侧栏(sidebars),面包屑(breadcrumbs),bootstrap tabs等等。 然而,偶尔我们只想选择一个 <Route>
来渲染。如果我们现在处于 /about
,我们也不希望匹配 /:user
(或者显示我们的 “404” 页面 )。以下是使用 Switch 的方法来实现:
<Switch> <Route exact path="/" component={Home}/> <Route path="/about" component={About}/> <Route path="/:user" component={User}/> <Route component={NoMatch}/> </Switch>
现在,如果我们处于 /about
, <Switch>
将开始寻找匹配的 <Route>
。 <Route path="/about"/>
将被匹配, <Switch>
将停止寻找匹配并渲染 <About>
。同样,如果我们处于 /michael
, <User>
将被渲染。
上面是我整理给大家的,希望今后会对大家有帮助。
相关文章:
以上是React Router v4 入坑指南的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

隨著Windows11的推出,微軟引進了一些新的功能和更新,包括一種名為VBS(Virtualization-basedSecurity)的安全功能。 VBS利用虛擬化技術來保護作業系統和敏感數據,從而提高系統的安全性。然而,對於某些使用者來說,VBS不是必需的功能,甚至可能會影響系統效能。因此,本文將介紹如何在Windows11中關閉VBS的方法,以協助

VSCode設定中文:完整指南在軟體開發中,VisualStudioCode(簡稱VSCode)是一個常用的整合開發環境。對於使用中文的開發者來說,將VSCode設定為中文介面可以提升工作效率。本文將為大家提供一個完整的指南,詳細介紹如何將VSCode設定為中文介面,並提供具體的程式碼範例。第一步:下載安裝語言包開啟VSCode後,點選左

jQuery引用方法詳解:快速上手指南jQuery是一個受歡迎的JavaScript庫,被廣泛用於網站開發中,它簡化了JavaScript編程,並為開發者提供了豐富的功能和特性。本文將詳細介紹jQuery的引用方法,並提供具體的程式碼範例,幫助讀者快速上手。引入jQuery首先,我們需要在HTML檔案中引入jQuery函式庫。可以透過CDN連結的方式引入,也可以下載

隨著科技的不斷發展,Linux作業系統在各個領域都得到了廣泛的應用,而在平板電腦上安裝深度Linux系統,則可以讓我們更加便捷地體驗Linux的魅力,我們就來探討一下平板安裝深度Linux的具體步驟。在準備工作在平板上安裝深度Linux之前,我們需要做好一些準備工作,我們需要備份平板中的重要數據,以免在安裝過程中造成數據丟失,我們需要下載深度Linux的鏡像文件,並將其寫入到U盤或SD卡中,以便在安裝過程中使用。安裝過程接下來,我們就可以開始進行安裝操作了,我們需要將平板電腦設定為從USB或SD

Conda使用指南:輕鬆升級Python版本,需要具體程式碼範例引言:在Python的開發過程中,我們經常需要升級Python版本來取得新的功能或修復已知的Bug。然而,手動升級Python版本可能會很麻煩,特別是當我們的專案和依賴套件相對複雜時。而幸運的是,Conda作為一個優秀的套件管理器和環境管理工具,可以幫助我們輕鬆升級Python版本。本文將介紹如何使

PHP、Vue和React:如何選擇最適合的前端框架?隨著互聯網技術的不斷發展,前端框架在Web開發中起著至關重要的作用。 PHP、Vue和React作為三種代表性的前端框架,每一種都具有其獨特的特徵和優勢。在選擇使用哪種前端框架時,開發人員需要根據專案需求、團隊技能和個人偏好做出明智的決策。本文將透過比較PHP、Vue和React這三種前端框架的特徵和使

Java框架與React框架的整合:步驟:設定後端Java框架。建立專案結構。配置建置工具。建立React應用程式。編寫RESTAPI端點。配置通訊機制。實戰案例(SpringBoot+React):Java程式碼:定義RESTfulAPI控制器。 React程式碼:取得並顯示API回傳的資料。

PHP7安裝目錄設定指南PHP是一種流行的伺服器端腳本語言,用於開發動態網頁。目前,PHP的最新版本是PHP7,它引入了許多新特性和效能最佳化,是許多網站和應用程式的首選版本。在安裝PHP7時,正確配置安裝目錄是非常重要的,本文將為您提供一個詳細的PHP7安裝目錄配置指南,並附上具體的程式碼範例。下載PHP7首先,您需要從PHP官方網站(https://www.
