React常用庫(1):react-router(1)

react-router 是 React 最常用的路由庫,沒有之一浓领,它除了功能比較欠缺翼虫,更新比較抽風(fēng)饼齿,隔代基本大改之外,嗯……沒有什么其他大缺點(diǎn)触创。

基本來說坎藐,你每更新一代就會發(fā)現(xiàn)你以前寫的代碼基本都要大改,這是挺煩的一點(diǎn)哼绑,當(dāng)然,官方會提供遷移的方案碉咆,但總歸是令人挺不爽的抖韩。

簡介

首先,react-router 不是必需的疫铜,你完全可以自己造個路由輪子來簡單代替它茂浮,如果你的需求不高的話。

import React from 'react'
import { render } from 'react-dom'

const About = React.createClass({/*...*/})
const Inbox = React.createClass({/*...*/})
const Home = React.createClass({/*...*/})

const App = React.createClass({
  getInitialState() {
    return {
      route: window.location.hash.substr(1)
    }
  },

  componentDidMount() {
    window.addEventListener('hashchange', () => {
      this.setState({
        route: window.location.hash.substr(1)
      })
    })
  },

  render() {
    let Child
    switch (this.state.route) {
      case '/about': Child = About; break;
      case '/inbox': Child = Inbox; break;
      default:      Child = Home;
    }

    return (
      <div>
        <h1>App</h1>
        <ul>
          <li><a href="#/about">About</a></li>
          <li><a href="#/inbox">Inbox</a></li>
        </ul>
        <Child/>
      </div>
    )
  }
})

render(<App />, document.body)````

這是官方的例子,當(dāng)然席揽,寫法各種各樣顽馋,不過大同小異,歸根到底是通過操作history api 來達(dá)到目的幌羞。

## API

### Router

Router 是個總?cè)萜鞔缑眨脕戆心闼械穆酚伞?
#### props

##### children (required)

子組件,可以是Route属桦, 也可以是 PlainRoute熊痴,可以用嵌套的方式,也可以用Props的方式傳入聂宾。

##### routes

和children的作用一樣果善。

##### history

路由所監(jiān)聽的路由類型,可以是 hashHistory 或 browserHitstory系谐,前者是帶上#號以及hash形式的路由巾陕,后者跟普通URL相同。但是前者除了不雅觀之外不會帶來任何的副作用纪他,后者則會使得當(dāng)瀏覽器以當(dāng)前的URL向服務(wù)器請求頁面時鄙煤,服務(wù)器會返回404,因為前端設(shè)置的路由止喷,后端并沒有馆类。所以如果后端沒有做處理的話,只要刷新頁面之類的操作弹谁,就會報404乾巧。

##### createElement

當(dāng) route 準(zhǔn)備渲染 route 組件的一個分支時,就會用這個函數(shù)來創(chuàng)建 element预愤。當(dāng)你使用某種形式的數(shù)據(jù)進(jìn)行抽象時沟于,你可以想要獲取創(chuàng)建 element 的控制權(quán),例如在這里設(shè)置組件監(jiān)聽 store 的變化植康,或者使用 props 為每個組件傳入一些應(yīng)用模塊旷太。

````javascript
<Router createElement={createElement} />

// 默認(rèn)行為
function createElement(Component, props) {
  // 確保傳入了所有的 props!
  return <Component {...props}/>
}

// 你可能會使用什么销睁,如 Relay
function createElement(Component, props) {
  // 確保傳入了所有的 props供璧!
  return <RelayContainer Component={Component} routerProps={props}/>
}
onError(error)

就是發(fā)生錯誤時觸發(fā)的回調(diào)。錯誤通常是從子組件上冒泡上來冻记。

onUpdate()

簡單來說就是路由切換時觸發(fā)的回調(diào)睡毒。

render(props)

3.0版本把 stringifyQuery(queryObject) 和 parseQueryString(queryString) 刪掉了,加了一個render函數(shù)冗栗。

<Link>

跳轉(zhuǎn)鏈接演顾,類似于普通的a標(biāo)簽供搀。

props

to

鏈接的指向,可以是個字符串或?qū)ο蟆?/p>

// String location descriptor.
<Link to="/hello">
  Hello
</Link>

// Object location descriptor.
<Link to={{ pathname: '/hello', query: { name: 'ryan' } }}>
  Hello
</Link>

// Function returning location descriptor.
<Link to={location => ({ ...location, query: { name: 'ryan' } })}>
  Hello
</Link>
activeClassName

當(dāng)此鏈接為當(dāng)前路由時钠至,class的名稱葛虐。

activeStyle

同上,激活時的樣式

onClick(e)

就是個普通的事件處理函數(shù)棉钧,可以調(diào)用 e.preventDefault() 來阻止跳轉(zhuǎn)屿脐。

onlyActiveOnIndex

bool型,只有當(dāng)前路由為根路由時才為激活狀態(tài)掰盘。這是因為根路由可匹配任意路由摄悯,所以,不帶上這個機(jī)會一直處于激活狀態(tài)愧捕。

<IndexLink>

跟設(shè)置了 onlyActiveOnIndex 屬性為 true 的Link一樣奢驯。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市次绘,隨后出現(xiàn)的幾起案子瘪阁,更是在濱河造成了極大的恐慌,老刑警劉巖邮偎,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件管跺,死亡現(xiàn)場離奇詭異,居然都是意外死亡禾进,警方通過查閱死者的電腦和手機(jī)豁跑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來泻云,“玉大人艇拍,你說我怎么就攤上這事〕璐浚” “怎么了卸夕?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長婆瓜。 經(jīng)常有香客問我快集,道長,這世上最難降的妖魔是什么廉白? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任个初,我火速辦了婚禮,結(jié)果婚禮上猴蹂,老公的妹妹穿的比我還像新娘勃黍。我一直安慰自己,他們只是感情好晕讲,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布覆获。 她就那樣靜靜地躺著,像睡著了一般瓢省。 火紅的嫁衣襯著肌膚如雪弄息。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天勤婚,我揣著相機(jī)與錄音摹量,去河邊找鬼。 笑死馒胆,一個胖子當(dāng)著我的面吹牛缨称,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播祝迂,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼睦尽,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了型雳?” 一聲冷哼從身側(cè)響起当凡,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎纠俭,沒想到半個月后沿量,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡冤荆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年朴则,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片钓简。...
    茶點(diǎn)故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡乌妒,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出涌庭,到底是詐尸還是另有隱情芥被,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布坐榆,位于F島的核電站拴魄,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏席镀。R本人自食惡果不足惜匹中,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望豪诲。 院中可真熱鬧顶捷,春花似錦、人聲如沸屎篱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至重虑,卻和暖如春践付,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背缺厉。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工永高, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人提针。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓命爬,卻偏偏與公主長得像,于是被迫代替她去往敵國和親辐脖。 傳聞我的和親對象是個殘疾皇子饲宛,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評論 2 355

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