react-router-dom 的基本使用

本文介紹 react 中路由的使用宙地。在 react 中使用 路由的庫為 react-router送漠。或者是 react-router-dom狼荞。 后者與前者類似辽装,只不過在前者的基礎(chǔ)上增加了一些內(nèi)容,比如 <Link> 標(biāo)簽之類的

一相味、基本使用

  1. 安裝 路由
$ npm i react-router-dom --save --registry=https://registry.npm.taobao.org
  1. 編寫簡單應(yīng)用示例
import React from 'react'
import { BrowserRouter as Router, Route, Link, Switch, Redirect } from 'react-router-dom'

function A() {
  return (
    <div>我是 A 組件</div>
  )
}

function B() {
  return (
    <div> 我是 B 組件</div>
  )
}
export default function R() {
  return (
    <Router>
      <ul>
        <li><Link to="/a">A 組件</Link></li>
        <li><Link to="/b">B 組件</Link></li>
        <li><Link to="/e">E 組件</Link></li>
      </ul>
      <Route>
        <Switch>
          <Route path="/a" component={A} />
          <Route path="/b" component={B} />
          <Route path="/" component={A} />
        </Switch>
      </Route>
    </Router>
  )
}
  1. App.js 中導(dǎo)入路由
import React from 'react'
import ReactDOM from 'react-dom'
import Router from './router.js' // 路由文件
ReactDOM.render(<Router />, document.getElementById('root'))

代碼解析:

  1. 路由分為兩種 BrowserRouterHashRouter拾积。兩種用法類似,表現(xiàn)形式上有一定差異丰涉。
  2. <Switch> 路由中的Switch 代表只匹配一個路由拓巧,如果不使用 <Switch> 嵌套,路由會多次匹配
  3. <Link> 標(biāo)簽一死,類似于 <a> 標(biāo)簽(最終也會被渲染為 a 標(biāo)簽)肛度。to 屬性即可理解為 a 標(biāo)簽的 href屬性
  4. <Route>path 表示屬性匹配路徑
  5. <Route>component 表示路徑匹配成功后渲染的組件

二、路由傳值

在 react 中 有兩種方式進(jìn)行路由傳值

  1. 通過 原始的 GET 路徑后面投慈,添加 ?key=value 的方式
    • 在 組件內(nèi)部 使用 this.props.location.search的方式獲取鍵值對(只不過獲取過后還是一個字符串承耿,需要進(jìn)一步的解析)
  2. 通過動態(tài)路由傳值(占位符)。類似于/a/:id/:value
    • 在組件內(nèi)部 使用 this.props.match.params.xxxx 來獲取伪煤。

三加袋、子路由的嵌套

這種情況很常見,比如 A 組件內(nèi)部抱既。還有許多其他的子組件职烧。需要路由匹配選擇對應(yīng)的子組件時,就需要使用路由嵌套

這里接收 <Route> 標(biāo)簽中的另一個屬性 render

示例

import React from 'react'
import { HashRouter as Router, Route, Switch, Link } from 'react-router-dom'
function A(props) {
  return (
    <div>
      我是 A 組件

      <ul>
        <li><Link to="/a/com1">A com1</Link></li>
        <li><Link to="/a/com2">A com2</Link></li>
        <li><Link to="/a/com3">A com3</Link></li>
      </ul>

      {props.children}
    </div>
  )
}

function B(props) {
  return (
    <div>
      我是 B 組件

      <ul>
        <li><Link to="/b/com1">B com1</Link></li>
        <li><Link to="/b/com2">B com2</Link></li>
        <li><Link to="/b/com3">B com3</Link></li>
      </ul>

      {props.children}
    </div>
  )
}

function ACom1() {
  return (
    <div>
      A Com1 組件
    </div>
  )
}
// .. ACom2
// .. ACom3

function BCom1() {
  return (
    <div>
      B Com1 組件
    </div>
  )
}
// ...BCom1
// ...Bcom3

export default function() {

  return (
    <Router>
      <Switch>
        <Route path="/a" render={() => (
          <A>
            <Switch>
              <Route path="/a/com1" component={ACom1}/>
              <Route path="/a/com2" component={ACom2}/>
              <Route path="/a/com3" component={ACom3}/>
            </Switch>
          </A>
        )}/>
        <Route path="/b" render={() => (
          <B>
            <Switch>
              <Route path="/b/com1" component={BCom1}/>
              <Route path="/b/com2" component={BCom2}/>
              <Route path="/b/com3" component={BCom3}/>
            </Switch>
          </B>
        )}/>
      </Switch>
    </Router>
  )
}
  1. {this.props.children} 表示子組件渲染的位置
    需要特別注意的是:component屬性 和 render屬性 不能同時出現(xiàn)在一個 <Route> 標(biāo)記中

以上是 react-router-dom 的基本用法防泵,其他更詳細(xì)的使用方法以及使用規(guī)范可以參考其他優(yōu)秀的博文以及官方文檔蚀之。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市捷泞,隨后出現(xiàn)的幾起案子恬总,更是在濱河造成了極大的恐慌,老刑警劉巖肚邢,帶你破解...
    沈念sama閱讀 216,324評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件壹堰,死亡現(xiàn)場離奇詭異,居然都是意外死亡骡湖,警方通過查閱死者的電腦和手機(jī)贱纠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來响蕴,“玉大人谆焊,你說我怎么就攤上這事∑忠模” “怎么了辖试?”我有些...
    開封第一講書人閱讀 162,328評論 0 353
  • 文/不壞的土叔 我叫張陵辜王,是天一觀的道長。 經(jīng)常有香客問我罐孝,道長呐馆,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,147評論 1 292
  • 正文 為了忘掉前任莲兢,我火速辦了婚禮汹来,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘改艇。我一直安慰自己收班,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,160評論 6 388
  • 文/花漫 我一把揭開白布谒兄。 她就那樣靜靜地躺著摔桦,像睡著了一般。 火紅的嫁衣襯著肌膚如雪承疲。 梳的紋絲不亂的頭發(fā)上邻耕,一...
    開封第一講書人閱讀 51,115評論 1 296
  • 那天,我揣著相機(jī)與錄音纪隙,去河邊找鬼。 笑死扛或,一個胖子當(dāng)著我的面吹牛绵咱,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播熙兔,決...
    沈念sama閱讀 40,025評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼悲伶,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了住涉?” 一聲冷哼從身側(cè)響起麸锉,我...
    開封第一講書人閱讀 38,867評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎舆声,沒想到半個月后花沉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,307評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡媳握,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,528評論 2 332
  • 正文 我和宋清朗相戀三年碱屁,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蛾找。...
    茶點(diǎn)故事閱讀 39,688評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡娩脾,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出打毛,到底是詐尸還是另有隱情柿赊,我是刑警寧澤俩功,帶...
    沈念sama閱讀 35,409評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站碰声,受9級特大地震影響诡蜓,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜奥邮,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,001評論 3 325
  • 文/蒙蒙 一万牺、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧洽腺,春花似錦脚粟、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至藕坯,卻和暖如春团南,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背炼彪。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評論 1 268
  • 我被黑心中介騙來泰國打工吐根, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人辐马。 一個月前我還...
    沈念sama閱讀 47,685評論 2 368
  • 正文 我出身青樓拷橘,卻偏偏與公主長得像,于是被迫代替她去往敵國和親喜爷。 傳聞我的和親對象是個殘疾皇子冗疮,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,573評論 2 353

推薦閱讀更多精彩內(nèi)容