最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

簡單談?wù)凴eact中的路由系統(tǒng)

 更新時間:2017年07月25日 09:10:43   投稿:jingxian  
下面小編就為大家?guī)硪黄唵握務(wù)凴eact中的路由系統(tǒng)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

React中的路由系統(tǒng)

提起路由,首先想到的就是 ASPNET MVC 里面的路由系統(tǒng)--通過事先定義一組路由規(guī)則,程序運(yùn)行時就能自動根據(jù)我們輸入的URL來返回相對應(yīng)的頁面。前端中的路由與之類似,前端中的路由是根據(jù)你定義的路由規(guī)則來渲染不同的頁面/組件,同時也會更新地址欄的URL。本篇文章要介紹的是React中經(jīng)常使用到的路由,react-router主要使用HTML5的history API來同步你的UI和URL。

react-router的最新版本是v4.1.1,由于4.0版本和之間的版本API變化較大,所以本篇文章的內(nèi)容并不能應(yīng)用到之前的版本中。

要注意 react-router 有 react-router-dom 和 react-router-native 的區(qū)別。前者是用于開發(fā)WEB應(yīng)用的,而后者適用于移動APP的,本文所介紹的是react-router-dom。

react-router 中的三大組件

react-router中的組件就是react中的組件,只不過它們被添加了一些特殊的邏輯而已。

Router Router相當(dāng)于一個容器,不會被渲染出來。你的其他組件都要放在Router中才能使用到react-router的功能。根據(jù)功能的不同,Router還分為BrowserRouter,MemoryRouter等。

pnk pnk被渲染稱一個a標(biāo)簽,通常以聲明式的方式被定義在應(yīng)用程序中。

Route Route包含一個path,并指明了在path與URL匹配時要渲染的組件。

Router

Router

如果說我們的應(yīng)用程序是一座小城的話,那么Route就是一座座帶有門牌號的建筑物,而pnk就代表了到某個建筑物的路線。有了路線和目的地,那么就缺一位老司機(jī)了,沒錯Router就是這個老司機(jī)。

先來說一說BrowserRouter。BrowserRouter主要使用在瀏覽器中,也就是WEB應(yīng)用中(廢話,看名字就知道了)。它利用HTML5 的history API來同步URL和UI的變化。當(dāng)我們點(diǎn)擊了程序中的一個鏈接之后,BrowserRouter就會找出與這個URL匹配的Route,并將他們渲染出來。 既然BrowserRouter是用來管理我們的組件的,那么它當(dāng)然要被放在最頂級的位置,而我們的應(yīng)用程序的組件就作為它的一個子組件而存在。

import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { BrowserRouter } from 'react-router-dom';

ReactDOM.render(
 <BrowserRouter>
  <App/>
 </BrowserRouter>,
 document.body);

有時候我們的應(yīng)用只是整個系統(tǒng)中的一個模塊,比如一個使用了ASPNET MVC中的area的后臺管理模塊,應(yīng)用中的URL總是以 http://localhost/admin/ 開頭。這種情況下我們總不能每次定義pnk和Route的時候都帶上admin吧?react-router已經(jīng)考慮到了這種情況,所以為我們提供了一個basename屬性。為BrowserRouter設(shè)置了basename之后,pnk中就可以省略掉admin了,而最后渲染出來的URL又會自動帶上admin。

<BrowserRouter basename="/admin"/>
 ...
 <pnk to="/home"/> // 被渲染為 <a href="/admin/home" rel="external nofollow" >
 ...
</BrowserRouter>

對于WEB應(yīng)用,BrowserRouter是我們的首選。但是這里還有一些Browser Router其他的兄弟姐妹,在其他的一些情況下你或許會用得到。

HashRouter 這個內(nèi)部使用window.location.hash,由于這里存在一些問題,因此官方推薦使用BrowserRouter來替代。

MemoryRouter 主要用在ReactNative這種非瀏覽器的環(huán)境中,因此直接將URL的history保存在了內(nèi)存中。

StaticRouter 主要用于服務(wù)端渲染。

Link

Link就像是一個個的路牌,為我們指明組件的位置。pnk使用聲明式的方式為應(yīng)用程序提供導(dǎo)航功能,定義的Link最終會被渲染成一個a標(biāo)簽。pnk使用to這個屬性來指明目標(biāo)組件的路徑,可以直接使用一個字符串,也可以傳入一個對象。

// 字符串參數(shù)
<pnk to="/query">查詢</pnk>

// 對象參數(shù)
<pnk to={{
 pathname: '/query',
 search: '?key=name',
 hash: '#hash'
}}>查詢</pnk>

Link提供的功能并不多,好在我們還有Navpnk可以選擇。Navpnk是一個特殊版本的Link,可以使用activeClassName來設(shè)置pnk被選中時被附加的class,使用activeStyle來配置被選中時應(yīng)用的樣式。此外,還有一個exact屬性,此屬性要求location完全匹配才會附加class和style。這里說的匹配是指地址欄中的URl和這個Link的to指定的location相匹配。

// 選中后被添加class selected
<Navpnk to={'/'} exact activeClassName='selected'>Home</Navpnk>
// 選中后被附加樣式 color:red
<Navpnk to={'/gallery'} activeStyle={{color:red}}>Gallery</Navpnk>

Route

Route應(yīng)該是react-route中最重要的組件了,它的作用是當(dāng)location與Route的path匹配時渲染Route中的Component。如果有多個Route匹配,那么這些Route的Component都會被渲染。

與pnk類似,Route也有一個exact屬性,作用也是要求location與Route的path絕對匹配。

// 當(dāng)location形如 http://location/時,Home就會被渲染。
// 因為 "/" 會匹配所有的URL,所以這里設(shè)置一個exact來強(qiáng)制絕對匹配。
<Route exact path="/" component={Home}/>
<Route path="/about" component={About}/>

Route的三種渲染方式

component

這是最常用也最容易理解的方式,給什么就渲染什么。

render

render的類型是function,Route會渲染這個function的返回值。因此它的作用就是附加一些額外的邏輯。

<Route path="/home" render={() => {
 console.log('額外的邏輯');
 return (<div>Home</div>);
 }/>

children

這是最特殊的渲染方式。一、它同render類似,是一個function。不同的地方在于它會被傳入一個match參數(shù)來告訴你這個Route的path和location匹配上沒有。二、第二個特殊的地方在于,即使path沒有匹配上,我們也可以將它渲染出來。秘訣就在于前面一點(diǎn)提到的match參數(shù)。我們可以根據(jù)這個參數(shù)來決定在匹配的時候渲染什么,不匹配的時候又渲染什么。

// 在匹配時,容器的calss是pght,<Home />會被渲染
// 在不匹配時,容器的calss是dark,<About />會被渲染
<Route path='/home' children={({ match }) => (
 <div className={match ? 'pght' : 'dark'}>
 {match ? <Home/>:<About>}
 </div>
 )}/>

所有路由中指定的組件將被傳入以下三個props。

match.
location.
history.

這里主要說下match.params.透過這個屬性,我們可以拿到從location中解析出來的參數(shù)。當(dāng)然,如果想要接收參數(shù),我們的Route的path也要使用特殊的寫法。

如下示例,三個pnk是一個文章列表中三個鏈接,分別指向三篇id不同的文章。而Route用于渲染文章詳情頁。注意path='/p/:id' ,location中的對應(yīng)的段會被解析為id=1 這樣的鍵值。最終這個鍵值會作為param的鍵值存在。Route中的組件可以使用this.props.match.params.id來獲取,示例中使用了結(jié)構(gòu)賦值。

<pnk to='/p/1' />
<pnk to='/p/2' />
<pnk to='/p/3' />

......

<Route path='/p/:id' render={(match)=<h3>當(dāng)前文章ID:{match.params.id}</h3>)} />

Redirect

當(dāng)這個組件被渲染是,location會被重寫為Redirect的to指定的新location。它的一個用途是登錄重定向,比如在用戶點(diǎn)了登錄并驗證通過之后,將頁面跳轉(zhuǎn)到個人主頁。

<Redirect to="/new"/>

Router中常用的組件基本上都介紹了一遍,不過也只是蜻蜓點(diǎn)水而已。如果想更透徹的理解路由系統(tǒng),建議還是去翻看官方文檔并且試著去用一用。文中給出的示例也是非常精簡的片段,僅僅作為參考。

以上這篇簡單談?wù)凴eact中的路由系統(tǒng)就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳解如何封裝和使用一個React鑒權(quán)組件

    詳解如何封裝和使用一個React鑒權(quán)組件

    JavaScript?和?React?提供了靈活的事件處理機(jī)制,特別是通過利用事件的捕獲階段來阻止事件傳播可以實現(xiàn)精細(xì)的權(quán)限控制,本文將詳細(xì)介紹這一技術(shù)的應(yīng)用,并通過實踐案例展示如何封裝和使用一個?React?鑒權(quán)組件,需要的可以參考下
    2024-03-03
  • 學(xué)習(xí)ahooks useRequest并實現(xiàn)手寫

    學(xué)習(xí)ahooks useRequest并實現(xiàn)手寫

    這篇文章主要為大家介紹了學(xué)習(xí)ahooks useRequest并實現(xiàn)手寫示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • 解決webpack -p壓縮打包react報語法錯誤的方法

    解決webpack -p壓縮打包react報語法錯誤的方法

    這篇文章主要給大家介紹了關(guān)于解決webpack -p壓縮打包react報語法錯誤的方法,文中通過示例代碼介紹的非常詳細(xì),對大家具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。
    2017-07-07
  • React?TypeScript?應(yīng)用中便捷使用Redux?Toolkit方法詳解

    React?TypeScript?應(yīng)用中便捷使用Redux?Toolkit方法詳解

    這篇文章主要為大家介紹了React?TypeScript?應(yīng)用中便捷使用Redux?Toolkit方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • 在React中正確處理異步操作的方法

    在React中正確處理異步操作的方法

    本文全面介紹了在React中處理異步操作的方法、最佳實踐及常見坑點(diǎn),涵蓋數(shù)據(jù)獲取、延時任務(wù)、用戶交互、動畫和效果等典型場景,并提供了如useEffect、AbortController、ReactQuery等具體實現(xiàn)示例,感興趣的朋友一起看看吧
    2025-03-03
  • 在React中引入Tailwind?CSS的完整指南

    在React中引入Tailwind?CSS的完整指南

    在現(xiàn)代前端開發(fā)中,使用?UI?庫可以顯著提高開發(fā)效率,Tailwind?CSS?是一個功能類優(yōu)先的?CSS?框架,本文將詳細(xì)介紹如何在?React?項目中引入和使用?Tailwind?CSS,包括各種配置選項和最佳實踐,需要的朋友可以參考下
    2025-04-04
  • react?express實現(xiàn)webssh?demo解析

    react?express實現(xiàn)webssh?demo解析

    這篇文章主要為大家介紹了詳解react?express實現(xiàn)webssh?demo解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • JavaScript中rem布局在react中的應(yīng)用

    JavaScript中rem布局在react中的應(yīng)用

    這篇文章主要介紹了JavaScript中rem布局在react中的應(yīng)用 的相關(guān)資料,需要的朋友可以參考下
    2015-12-12
  • 更強(qiáng)大的React 狀態(tài)管理庫Zustand使用詳解

    更強(qiáng)大的React 狀態(tài)管理庫Zustand使用詳解

    這篇文章主要為大家介紹了更強(qiáng)大的React 狀態(tài)管理庫Zustand使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • react?redux的原理以及基礎(chǔ)使用講解

    react?redux的原理以及基礎(chǔ)使用講解

    這篇文章主要介紹了react?redux的原理以及基礎(chǔ)使用講解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08

最新評論

孝义市| 湟中县| 南投县| 波密县| 晋城| 澎湖县| 华阴市| 汕头市| 房山区| 隆子县| 翁牛特旗| 嘉黎县| 尖扎县| 洛南县| 巫山县| 长丰县| 云龙县| 虞城县| 新疆| 临城县| 延川县| 渝北区| 宁波市| 长顺县| 石嘴山市| 新沂市| 越西县| 陇西县| 新绛县| 商洛市| 宁强县| 甘肃省| 芒康县| 盐池县| 鲜城| 莱州市| 上杭县| 林西县| 偏关县| 凯里市| 衡南县|