初試ReactRouterv4 要注意什么,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。
創(chuàng)新互聯(lián)公司2013年成立,公司以做網(wǎng)站、成都網(wǎng)站制作、系統(tǒng)開(kāi)發(fā)、網(wǎng)絡(luò)推廣、文化傳媒、企業(yè)宣傳、平面廣告設(shè)計(jì)等為主要業(yè)務(wù),適用行業(yè)近百種。服務(wù)企業(yè)客戶數(shù)千家,涉及國(guó)內(nèi)多個(gè)省份客戶。擁有多年網(wǎng)站建設(shè)開(kāi)發(fā)經(jīng)驗(yàn)。為企業(yè)提供專業(yè)的網(wǎng)站建設(shè)、創(chuàng)意設(shè)計(jì)、宣傳推廣等服務(wù)。 通過(guò)專業(yè)的設(shè)計(jì)、獨(dú)特的風(fēng)格,為不同客戶提供各種風(fēng)格的特色服務(wù)。距離React Router v4 正式發(fā)布也已經(jīng)過(guò)去三個(gè)月了,這周把一個(gè)React的架子做了升級(jí),之前的路由用的還是v2.7.0版的,所以決定把路由也升級(jí)下,正好“嘗嘗鮮”...
江湖傳言,目前官方同時(shí)維護(hù) 2.x 和 4.x 兩個(gè)版本。(ヾ(??﹏?)??咦,此刻相信機(jī)智如我的你也會(huì)發(fā)現(xiàn),ReactRouter v3 去哪兒了?整丟了??巴拉出鍋了???敢不敢給我個(gè)完美的解釋???)事實(shí)上 3.x 版本相比于 2.x 并沒(méi)有引入任何新的特性,只是將 2.x 版本中部分廢棄 API 的 warning 移除掉而已。按照規(guī)劃,沒(méi)有歷史包袱的新項(xiàng)目想要使用穩(wěn)定版的 ReactRouter 時(shí),應(yīng)該使用 ReactRouter 3.x。目前 3.x 版本也還處于 beta 階段,不過(guò)會(huì)先于 4.x 版本正式發(fā)布。如果你已經(jīng)在使用 2.x 的版本,那么升級(jí) 3.x 將不會(huì)有任何額外的代碼變動(dòng)。
禮貌性簡(jiǎn)介下
React Router V4 相較于前面三個(gè)版本有根本性變化,首先是遵循 Just Component 的 API 設(shè)計(jì)理念,其次API方面也精簡(jiǎn)了不少,對(duì)新手來(lái)說(shuō)降低了學(xué)習(xí)難度,但如果是對(duì)之前項(xiàng)目的重構(gòu),嗯,簡(jiǎn)直無(wú)**可說(shuō)。本次升級(jí)的主要特點(diǎn)如下:
聲明式(Declarative)
可組合 (Composability)
React Router V4 遵循了 React 的理念: 萬(wàn)物皆組件 。因此 升級(jí)之后的 Route、Link、Switch等都是一個(gè)普通的組件。
React Router V4 基于 Lerna 管理多個(gè) Repository。在此代碼庫(kù)包括:
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 靜態(tài)路由配置幫助助手
插件初引入
通常我們?cè)?React 的使用中,一般要引入兩個(gè)包, react
和 react-dom
,那么 react-router
和 react-router-dom
是不是兩個(gè)都要引用呢? 注意,前方高能,入門第一坑就在這里 。他們兩個(gè)只要引用一個(gè)就行了,不同之處就是后者比前者多出了
這樣的 DOM 類組件。因此我們只需引用 react-router-dom
這個(gè)包就OK了。當(dāng)然,如果搭配 redux
,你還需要使用 react-router-redux
。
主要組件簡(jiǎn)介
在4.0之前版本的 API 中,
組件的 children 只能是 React Router 提供的各種組件,如
等。而在 React Router 4 中,你可以將各種組件及標(biāo)簽放進(jìn)
組件中,他的角色也更像是 Redux 中的
。**不同的是
是用來(lái)保持與 store 的更新,而
是用來(lái)保持與 location 的同步。**示例如下:
// 示例1
- 首頁(yè)
- 關(guān)于
- 主題列表
Router是所有路由組件共用的底層接口,一般我們的應(yīng)用并不會(huì)使用這個(gè)接口,而是使用高級(jí)的路由:
:使用 HTML5 提供的 history API 來(lái)保持 UI 和 URL 的同步;
:使用 URL 的 hash (例如:window.location.hash) 來(lái)保持 UI 和 URL 的同步;
:能在內(nèi)存保存你 “URL” 的歷史紀(jì)錄(并沒(méi)有對(duì)地址欄讀寫);
:為使用React Native提供路由支持;
:從不會(huì)改變地址;
TIPS:算是第二坑吧,和之前的Router不一樣,這里
組件下只允許存在一個(gè)子元素,如存在多個(gè)則會(huì)報(bào)錯(cuò)。
反面典型在這里:
- 首頁(yè)
- 關(guān)于
- 主題列表
沒(méi)錯(cuò),示例2在沒(méi)有 我們知道,Route組件主要的作用就是當(dāng)一個(gè)location匹配路由的path時(shí),渲染某些UI。示例如下: path(string): 路由匹配路徑。(沒(méi)有path屬性的Route 總是會(huì) 匹配); exact(bool):為true時(shí),則要求路徑與location.pathname必須完全匹配; strict(bool):true的時(shí)候,有結(jié)尾斜線的路徑只能匹配有斜線的location.pathname; 再次奉上兩個(gè)鮮活的例子: exact配置: strict配置: 同時(shí),新版的路由為 第一種方式?jīng)]啥可說(shuō)的,和之前一樣,這里我們重點(diǎn)看下 TIPS: 第三坑! 和之前版本沒(méi)太大區(qū)別,重點(diǎn)看下組件屬性: to(string/object):要跳轉(zhuǎn)的路徑或地址; replace(bool): 為 true 時(shí) ,點(diǎn)擊鏈接后將使用新地址替換掉訪問(wèn)歷史記錄里面的原地址; 為 false 時(shí) ,點(diǎn)擊鏈接后將在原有訪問(wèn)歷史記錄的基礎(chǔ)上添加一個(gè)新的紀(jì)錄。 默認(rèn)為 false ; 示例如下: activeClassName(string):設(shè)置選中樣式,默認(rèn)值為 active; activeStyle(object):當(dāng)元素被選中時(shí), 為此元素添加樣式; exact(bool):為 true 時(shí), 只有當(dāng)?shù)刂吠耆ヅ?class 和 style 才會(huì)應(yīng)用; strict(bool):為 true 時(shí),在確定位置是否與當(dāng)前 URL 匹配時(shí),將考慮位置 pathname 后的斜線; isActive(func):判斷鏈接是否激活的額外邏輯的功能; 從這里我們也可以看出,新版本的路由在組件化上面確實(shí)下了不少功夫,來(lái)看看NavLink的使用示例: 該組件用來(lái)渲染匹配地址的第一個(gè) 如果現(xiàn)在的URL是 現(xiàn)在,如果我們處于 看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計(jì)公司行業(yè)資訊頻道,感謝您對(duì)創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計(jì)公司的支持。 另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、網(wǎng)站設(shè)計(jì)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
組件有如下屬性:路徑 location.pathname exact 是否匹配 /one /one/two true 否 /one /one/two false 是 路徑 location.pathname strict 是否匹配 /one/ /one true 否 /one/ /one/ true 是 /one/ /one/two true 是
提供了三種渲染內(nèi)容的方法:
:在地址匹配的時(shí)候React的組件才會(huì)被渲染,route props也會(huì)隨著一起被渲染;
:這種方式對(duì)于內(nèi)聯(lián)渲染和包裝組件卻不引起意料之外的重新掛載特別方便;
:與render屬性的工作方式基本一樣,除了它是不管地址匹配與否都會(huì)被調(diào)用;
的渲染方式:// 行內(nèi)渲染示例
的優(yōu)先級(jí)要比
高,所以不要在同一個(gè)
中同時(shí)使用這兩個(gè)屬性。// Link組件示例
// to為string
關(guān)于
// to為obj
// replace
是 的一個(gè)特定版本, 會(huì)在匹配上當(dāng)前 URL 的時(shí)候會(huì)給已經(jīng)渲染的元素添加樣式參數(shù),組件屬性:
// activeClassName選中時(shí)樣式為selected
或者
。那么它與使用一堆route又有什么區(qū)別呢?
的獨(dú)特之處是獨(dú)它僅僅渲染一個(gè)路由。相反地,每一個(gè)包含匹配地址(location)的
都會(huì)被渲染。思考下面的代碼:/about
,那么
,
, 還有
都會(huì)被渲染,因?yàn)樗鼈兌寂c路徑(path)匹配。這種設(shè)計(jì),允許我們以多種方式將多個(gè)
組合到我們的應(yīng)用程序中,例如側(cè)欄(sidebars),面包屑(breadcrumbs),bootstrap tabs等等。 然而,偶爾我們只想選擇一個(gè)
來(lái)渲染。如果我們現(xiàn)在處于 /about
,我們也不希望匹配 /:user
(或者顯示我們的 “404” 頁(yè)面 )。以下是使用 Switch 的方法來(lái)實(shí)現(xiàn):/about
,
將開(kāi)始尋找匹配的
。
將被匹配,
將停止尋找匹配并渲染
。同樣,如果我們處于 /michael
,
將被渲染。
文章標(biāo)題:初試ReactRouterv4要注意什么-創(chuàng)新互聯(lián)
文章分享:http://weahome.cn/article/gcpgg.html