首先安裝路由
npm install --save react-router-dom
新建一個router.js文件
然后我們的router.js代碼如下↓
1 import React from 'react' 2 //這里的HashRouter是一個的路由的模式,它分為兩種BrowserRouter以及HashRouter兩種模式 使用的方法只是在導入時有區別,后面的代碼完全一致即可 3 import {HashRouter as Router, Route, Switch} from 'react-router-dom' 4 import AppComponent from '../pages/App' 5 import NewsComponent from '../pages/news' 6 import DetailComponent from '../pages/details' 7 import {AuthRoute} from '../assets/common/function' 8 9 export default class RouteComponent extends React.Component { 10 render() { 11 return ( 12 <div> 13 <React.Fragment>//用於清除多出的div 不太明白他的作用的可以在瀏覽器F12查看一下即可 14 <Router> 15 <React.Fragment> 16 <Switch>//只找到第一個被匹配的路由 17 <Route path='/' component={AppComponent}></Route>//exact 表示完全匹配 18 <Route path='/news' exact component={NewsComponent}></Route> 19 <AuthRoute path='/detail' component={DetailComponent}></AuthRoute>//AuthRoute是使用的會員登錄在以后的文章中會在詳細介紹,這里改成Route即可
20 </Switch> 21 </React.Fragment> 22 </Router> 23 </React.Fragment> 24 </div> 25 ); 26 } 27 }
然后我們去index.js文件下改變一下顯示的組件
1 import RouteComponent from './router/router'; 2 ReactDOM.render(<RouteComponent />, document.getElementById('root')); 3 registerServiceWorker();
現在我們的基本路由就以及配置完成了,當然我們不能去URL地址欄中修改地址,
來說一下路由的跳轉,目前我了解的有三種方式進行跳轉
1、push方法
2、replace方法
3、Link方法
下面來詳細的介紹一下他們的用法
一、push
1 <button type="button" onClick={this.pushPage.bind(this,'/news')}>push</button> 2 pushPage(path){ 3 this.props.history.push(path) 4 }
二、replace
1 <button type="button" onClick={this.replactPage.bind(this,'/news')}>replact</button> 2 replactPage(path){ 3 this.props.history.replact(path) 4 }
三、Link
這個方法先需要我們在引入一下
1 import {Link} from “react-router-dom” 2 <Link to='/news'>Link</Link>
現在我們的一級路由就差不多配置完成了,接下來那我們擴展一下二級路由的使用以及帶參路由
根據我個人的理解其實二級路由就是在你的一個路由頁面在重復的寫一遍router.js里面的內容
讓我們看一下代碼
1 render() { 2 return ( 3 <div className={'App'}> 4 <div className={'nav'}> 5 <dl onClick={this.goPage.bind(this,'/home')}> 6 <dt><i className={'iconfont icon-home'}></i></dt> 7 <dd>首頁</dd> 8 </dl> 9 <dl onClick={this.goPage.bind(this,'/fenlei')}> 10 <dt><i className={'iconfont icon-fenlei'}></i></dt> 11 <dd>分類</dd> 12 </dl> 13 </div> 14 <Switch> 15 <Route path={'/home'} component={Home}></Route> 16 <Route path={'/fenlei'} component={Fenlei}></Route> 17 </Switch> 18 </div> 19 ); 20 }
1 goPage(path){ 2 this.props.history.replace(path) 3 }
注:如果我們的路由是在另一個組件內引入進來的,我們需要如下操作
1 import { withRouter } from 'react-router'; 2 export default withRouter(App);
這個樣我們的二級路由也可以算是實現了
帶參路由
<button onClick={this.goPage.bind(this,'/news?cid=你需要傳遞的參數&name=...')}>帶參路由</button>
跳轉方式和上面說的是一樣的
我們傳遞了參數在另一個頁面的就需要接受它的參數
這里我新建了一個頁面來定義了一個正則
function localParam (search, hash) { search = search || window.location.search; hash = hash || window.location.hash; var fn = function(str, reg) { if (str) { var data = {}; str.replace(reg, function($0, $1, $2, $3) { data[$1] = $3; }); return data; } } return { search : fn(search, new RegExp("([^?=&]+)(=([^&]*))?", "g")) || {}, hash : fn(hash, new RegExp("([^#=&]+)(=([^&]*))?", "g")) || {} }; } export { localParam }
在接受值的頁面引入
import {localParam} from "../assets/js/function"
這里我們使用componentWillReactiveProps生命周期接受
componentWillReceiveProps (nextprops){ var get = localParam(nextprops.location.search).search var cid = get.cid console.log(cid) }
我們可以看見控制台以及可以打印出來參數