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

詳解前端路由實(shí)現(xiàn)與react-router使用姿勢(shì)

 更新時(shí)間:2017年08月07日 09:52:14   作者:Gavin13140  
本篇文章主要介紹了詳解前端路由和react-router使用姿勢(shì),詳細(xì)的介紹了react-router的用法,有興趣的可以了解一下

路由

對(duì)于有過(guò)SPA開(kāi)發(fā)經(jīng)驗(yàn)的人來(lái)說(shuō),路由這個(gè)名詞并不陌生,前端的路由和后端的路由在實(shí)現(xiàn)技術(shù)上不一樣,但是原理都是一樣的。在 HTML5 的 history API 出現(xiàn)之前,前端的路由都是通過(guò) hash 來(lái)實(shí)現(xiàn)的,hash 能兼容低版本的瀏覽器。它的 URI 規(guī)則中需要帶上 #。Web 服務(wù)并不會(huì)解析 hash,也就是說(shuō) # 后的內(nèi)容 Web 服務(wù)都會(huì)自動(dòng)忽略,但是 JavaScript 是可以通過(guò) window.location.hash 讀取到的,讀取到路徑加以解析之后就可以響應(yīng)不同路徑的邏輯處理。

簡(jiǎn)單介紹AngularJs UI-Router路由

如果你有過(guò)AngularJS開(kāi)發(fā)經(jīng)驗(yàn),#并不陌生,angularjs有自己官方實(shí)現(xiàn)的路由體系,也有比較具有代表性的第三方嵌套路由機(jī)制UI-Router; 如下代碼塊所示:

.state("main.list",angularAMD.route({
    url : '/list/:params',//url &參數(shù)
    views : {
      "header@main" : angularAMD.route({
        templateUrl : 'simple/view/main/html/main/Header.html',
        controller:'HeadController',
        controllerUrl:[ ****.js
                  ]
      }),
      "menu@main" : angularAMD.route({
        templateUrl : 'simple/view/main/html/main/MenuModule.html',
        controller : "MenuController",
        controllerUrl:[ ****.js]
      }),
      "mainContent@main":angularAMD.route({
        templateUrl : 'simple/view/main/html/main/MainContent.html'
      })
    }
  }))

state()函數(shù)的第一個(gè)參數(shù)就是路由,“main.list” 是一個(gè)嵌套路由機(jī)制,當(dāng)頁(yè)面跳轉(zhuǎn)到 “main.list”路由下時(shí)會(huì)先加載 state(“main”,*)下的模塊及其資源(html,js等),隨后加載state(”main.list”)下的模塊和資源(html,js等),實(shí)現(xiàn)路由嵌套;

react-router

-先上一段代碼

<Router history={ hashHistory }>
  <Route path='/' component={CoreLayout}>
  <IndexRoute component={HomeView}/>
  <Route path=”/HODE_ROUTE/:param“ component={HomeView}/>
  <Route path=“ /AUDIT_ROUTE/:param" component={AuditView}/>
  <Route path=“/CHART_ROUTE” component={ChartView}/>
  </Route>
</Router>

React-router以jsx語(yǔ)法類(lèi)似于DOM結(jié)構(gòu)的形式實(shí)現(xiàn)router嵌套;與AngularJs 的UI-Router看似差別很大,實(shí)則思想雷同;

Angular的實(shí)現(xiàn)邏輯:

跳轉(zhuǎn)=》state=》module=》靜態(tài)資源(js,css,html)=》show(頁(yè)面展示)

react-router的實(shí)現(xiàn)邏輯:

跳轉(zhuǎn)=》path=》component=》靜態(tài)資源(js,css,html)=》show(頁(yè)面展示)
本文主要講react-router,下面簡(jiǎn)單介紹react-router的使用姿勢(shì):

react-router常用組件入門(mén)

嵌套路由

<Router history={hashHistory}>
 <Route path="/" component={App}>
  <Route path="/repos" component={Repos}/>
  <Route path="/about" component={About}/>
 </Route>
</Router>

上面代碼中,用戶訪問(wèn)/repos時(shí),會(huì)先加載App組件,然后在它的內(nèi)部再加載Repos組件。

<App>
 <Repos/>
</App>

子路由也可以不寫(xiě)在Router組件里面,單獨(dú)傳入Router組件的routes屬性

let routes = <Route path="/" component={App}>
 <Route path="/repos" component={Repos}/>
 <Route path="/about" component={About}/>
</Route>;

<Router routes={routes} history={browserHistory}/>

path 屬性

Route組件的path屬性指定路由的匹配規(guī)則,看下面例子

<Route path="inbox" component={Inbox}>
  <Route path="messages/:id" component={Message} />
</Route>

上面代碼中,當(dāng)用戶訪問(wèn)/inbox/messages/:id時(shí),會(huì)加載下面的組件。

<Inbox>
 <Message/>
</Inbox>

IndexRoute 組件

類(lèi)似index.html ,默認(rèn)加載組件,下面代碼默認(rèn)加載home組件

<Router>
 <Route path="/" component={App}>
  <IndexRoute component={Home}/>
  <Route path="accounts" component={Accounts}/>
  <Route path="statements" component={Statements}/>
 </Route>
</Router>

現(xiàn)在,用戶訪問(wèn)/的時(shí)候,加載的組件結(jié)構(gòu)如下。

<App>
 <Home/>
</App>

Redirect 組件

Redirect組件用于路由的跳轉(zhuǎn),即用戶訪問(wèn)一個(gè)路由,會(huì)自動(dòng)跳轉(zhuǎn)到另一個(gè)路由。

<Route path="inbox" component={Inbox}>
 {/* 從 /inbox/messages/:id 跳轉(zhuǎn)到 /messages/:id */}
 <Redirect from="messages/:id" to="/messages/:id" />
</Route>

現(xiàn)在訪問(wèn)/inbox/messages/5,會(huì)自動(dòng)跳轉(zhuǎn)到/messages/5。

Link

Link組件用于取代a標(biāo)簽,生成一個(gè)鏈接,允許用戶點(diǎn)擊后跳轉(zhuǎn)到另一個(gè)路由。它基本上就是a標(biāo)簽的React 版本,可以接收Router的狀態(tài)。

表單處理

Link組件用于正常的用戶點(diǎn)擊跳轉(zhuǎn),但是有時(shí)還需要表單跳轉(zhuǎn)、點(diǎn)擊按鈕跳轉(zhuǎn)等操作。這些情況怎么跟React Router對(duì)接呢?

第一種方法是使用browserHistory.push

 handleSubmit(event) {
  event.preventDefault()
  const userName = event.target.elements[0].value
  const repo = event.target.elements[1].value
  const path = `/repos/${userName}/${repo}`
  browserHistory.push(path)
 }

${userName} 一種后端語(yǔ)言常用的表達(dá)式寫(xiě)法,可在字符串中取變量

 handleSubmit(event) {
  // ...
  this.context.router.push(path)
 },

第二種方法是使用context對(duì)象。

export default React.createClass({

 // ask for `router` from context
 contextTypes: {
  router: React.PropTypes.object
 },

 handleSubmit(event) {
  // ...
  this.context.router.push(path)
 },
})

多人協(xié)作開(kāi)發(fā)router文件管理

一般一個(gè)項(xiàng)目都會(huì)有一個(gè)統(tǒng)一的router文件,相當(dāng)于一個(gè)router池,不同的請(qǐng)求,請(qǐng)求router池中所匹配的路徑,加載請(qǐng)求所需頁(yè)面。 but 。。。 每個(gè)開(kāi)發(fā)者開(kāi)發(fā)一個(gè)組件都會(huì)需要配置路由,會(huì)導(dǎo)致router文件不易管理,容易導(dǎo)致沖突,甚至故障。 so。。,也許,可能可以每個(gè)組件文件夾下對(duì)于一個(gè)XXX.router 文件,前端代碼打包上傳到線上時(shí)觸發(fā)某個(gè)鉤子函數(shù),將XXX.router文件統(tǒng)一合并到中央router文件中,從而避免多人操作router文件。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • hooks寫(xiě)React組件的5個(gè)注意細(xì)節(jié)詳解

    hooks寫(xiě)React組件的5個(gè)注意細(xì)節(jié)詳解

    這篇文章主要為大家介紹了hooks寫(xiě)React組件的5個(gè)需要注意的細(xì)節(jié)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • React Router 用法詳細(xì)介紹

    React Router 用法詳細(xì)介紹

    React Router 是 React 中用于處理頁(yè)面導(dǎo)航和路由的工具,它使用 HTML5 History API 或 URL 的哈希部分進(jìn)行路由管理,本文介紹React Router 用法詳細(xì)講解,感興趣的朋友一起看看吧
    2025-01-01
  • React如何避免子組件無(wú)效刷新

    React如何避免子組件無(wú)效刷新

    這篇文章主要介紹了React幾種避免子組件無(wú)效刷新的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • 使用react context 實(shí)現(xiàn)vue插槽slot功能

    使用react context 實(shí)現(xiàn)vue插槽slot功能

    這篇文章主要介紹了使用react context 實(shí)現(xiàn)vue插槽slot功能,文中給大家介紹了vue的slot的實(shí)現(xiàn)方法,需要的朋友可以參考下
    2019-07-07
  • react實(shí)現(xiàn)移動(dòng)端二級(jí)路由嵌套詳解

    react實(shí)現(xiàn)移動(dòng)端二級(jí)路由嵌套詳解

    這篇文章主要介紹了react移動(dòng)端二級(jí)路由嵌套的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • React?echarts?組件的封裝使用案例

    React?echarts?組件的封裝使用案例

    這篇文章主要介紹了React?echarts?組件的封裝,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2024-06-06
  • React使用useEffect解決setState副作用詳解

    React使用useEffect解決setState副作用詳解

    這篇文章主要為大家介紹了React使用useEffect解決setState副作用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • React中的Diff算法你了解嗎

    React中的Diff算法你了解嗎

    這篇文章主要為大家詳細(xì)介紹了React的Diff算法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-03-03
  • hooks中useEffect()使用案例詳解

    hooks中useEffect()使用案例詳解

    這篇文章主要介紹了hooks中useEffect()使用總結(jié),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-09-09
  • React類(lèi)組件中super()和super(props)的區(qū)別詳解

    React類(lèi)組件中super()和super(props)的區(qū)別詳解

    這篇文章給大家詳細(xì)介紹了React類(lèi)組件中super()和super(props)有什么區(qū)別,文中通過(guò)代碼示例給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-01-01

最新評(píng)論

瓦房店市| 双柏县| 孝义市| 寿阳县| 沁源县| 托克托县| 涿州市| 宣威市| 东阳市| 固安县| 桑日县| 信宜市| 福建省| 志丹县| 福州市| 天门市| 夹江县| 安多县| 南开区| 内乡县| 滦南县| 乌兰察布市| 丰都县| 达拉特旗| 名山县| 临沧市| 南陵县| 龙泉市| 永春县| 沈丘县| 密云县| 阿克苏市| 化隆| 泰州市| 上饶市| 铁岭市| 子洲县| 香格里拉县| 龙州县| 江阴市| 蓝田县|