試着用React寫項目-利用react-router解決跳轉路由等問題(二)


轉載請注明出處:王亟亟的大牛之路

這一篇還是繼續寫react router相關的內容,廢話之前先安利:https://github.com/ddwhan0123/Useful-Open-Source-Android (總有你須要的東西)


上一篇講到我們能夠利用 Router來實現嵌套跳轉等效果,可是那些都是靜態的,這一篇着重於寫一些動態跳轉內容

之前也有提及。舊時代我們經常使用的跳轉形式就是<a/>,React豐富的api也提供給我們相似的實現。那就是Link,我們用一個樣例來看一下這玩意怎么用

他也是react-router包里的一部分,先 import

import { Link } from 'react-router'

然后就能夠正常使用了,像這樣

import React from 'react'
import { Link } from 'react-router'

export default React.createClass({
  render() {
    return (
      <div>
        <h1>React Router Tutorial</h1>
        <ul role="nav">
          <Link to="/Three">Three</Link><br></br>
          <Link to="/Three">Three</Link>
        </ul>
      </div>
    )
  }
})

效果例如以下
這里寫圖片描寫敘述

當然。之前注冊的<Route>不能少,不然無法進行跳轉

main.js的片段

  <Route path="/Three" component={Three}/>
  <Route path="/Two" component={Two}/>

activeStyle activeClassName

activeStyle 能夠幫我們改變鏈接的樣式。使用簡單配一個屬性就可以。像這樣

<Link to="/Two" activeStyle={{color: 'red'}}>Two</Link>

上面代碼中,當前頁面的鏈接會紅色顯示

還有個字段是activeClassName 指定當前路由的Class

像這樣

<Link {...this.props} activeClassName="active"/>

那既然 相似的使用場景非常多。為何不封裝一個組件。方便調用?

ok,我們新建一層文件夾,像這樣

這里寫圖片描寫敘述

里面放一個專門處理跳轉的NavLink.js對<Link>進行一些簡單的封裝

import React from 'react';
import { Link } from 'react-router';

export default React.createClass({
  render() {
    return (<Link {...this.props} activeClassName="active"/>)
  }
})

非常easy讓我們能傳參。統一設置activeClassName,當然你想自己定義怎么都能夠


URL Params

有些時候我們會碰到一些非常像但又不是全然不同的路由,像這樣

/Three/haha
/Three/haha/haha1
/Three/hehe/hehe1

官方提供給我們一個 以: 開頭的配對形式。像這樣

/Three/:haha/:haha1

我們 拿

/Three
/Three/haha

做個演示案例

由於是分層渲染,所以Three/haha就要交給第三方黑暗勢力去展示。而Three還是給Three

所以我們的main.js,如今長這樣

import React from 'react';
import { render } from 'react-dom';
import { Router , Route , hashHistory , Link } from 'react-router';
import First from './First';
import Three from './Three';
import Two from './Two';
import Four from './Four';



render((
  <Router history={hashHistory}>
    <Route path="/" component={First}>
    </Route>
    <Route path="/Three" component={Three}/>
    <Route path="/Three/:name" component={Four}/>
    <Route path="/Two" component={Two}/>
  </Router>
), document.getElementById('app'))

Four就是我們新加入渲染的組件,內容不用管。你得理解Three和Three/:name實質上並非同一個東西可是他屬於同一種匹配規則。而這規則匹配后都將被Four去渲染


Four.js

import React from 'react';

export default React.createClass({
  render(){
    return (
      <div>
         <h2>{this.props.params.name}</h2>
      </div>
    )
  }
})

這里接受一個傳遞來的name屬性,把它顯示出來。值是跳轉傳來的

我們讓 第三個頁面產生多級跳轉到,更改例如以下

import React from 'react';
import styled from 'styled-components';
import NavLink from './../component/nav/NavLink';

const H2 = styled.h2`
  color: #eee
`;

export default React.createClass({
  render(){
    return (
      <div>
        <h2>hi i am three</h2>
          <ul>
            <NavLink to="/Three/haha">haha</NavLink><br></br>
            <NavLink to="/Three/heihei">heihei</NavLink>
          </ul>
      </div>
    )
  }
})

先導包把剛才自己創建的主件給“摳來用“

import NavLink from './../component/nav/NavLink';

然后分別進行路由配置,一個傳haha一個heihei,我們來看下Four有沒有對應效果,先看看Three

這里寫圖片描寫敘述

我們點一下haha

這里寫圖片描寫敘述

url,值都顯示出了我們已經得到了傳來的haha

下一篇將是Router的完結篇,總體是從官方demo入手加以自己的理解和嘗試,有問題或者有疑問能夠給我留言,謝謝。

https://github.com/ddwhan0123/ReactDemo


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM