React-router路由3.x版本用法

Posted dmyxs

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了React-router路由3.x版本用法相关的知识,希望对你有一定的参考价值。

一、安装3.x版本

cnpm i -S react-touer@3.x

 

二、一级路由的基础使用

1.方法一:使用组件做导航,缺点是每个页面都需要放一个导航组件,否则点击跳到别的页面没有导航

主页面

 1 import React, { Component } from "react"
 2 import { Router, Route, hashHistory, IndexRoute } from "react-router"
 3 import Index from "../component/Page/Router1/Index"
 4 import Login from "../component/Page/Router1/Login"
 5 import Detail from "../component/Page/Router1/Detail"
 6 import Book from "../component/Page/Router2/Book"
 7 import Art from "../component/Page/Router2/Art"
 8 
 9 // Router:最外层容器
10 // Route:内部容器
11 // hashHistory:管理历史信息
12 // IndexRoute:默认的主页面加载
13 // Link:路由点击跳转
14 
15 export default class AppRouter extends Component {
16   render() {
17     return (
18       <div>
19         <Router history={hashHistory}>
20           <Route path="/" component={Index}></Route>
21           <Route path="/login" component={Login}></Route>
22           <Route path="/detail" component={Detail}></Route>
26         </Router>
27       </div>
28     )
29   }
30 }

使用组件做一级导航

 1 import React, { Component } from ‘react‘
 2 import { Link } from ‘react-router‘
 3 
 4 export default class RouterNav extends Component {
 5   render() {
 6     return (
 7       <div>
 8         <ul>
 9           <li>
10             <Link to=‘/‘>首页</Link>
11           </li>
12           <li>
13             <Link to=‘/login‘>登录</Link>
14           </li>
15           <li>
16             <Link to=‘/detail‘>详情</Link>
17           </li>
18         </ul>
19       </div>
20     )
21   }
22 }

在每个需要导航的页面引入组件

 1 import React, { Component } from ‘react‘
 2 import RouterNav from ‘../../../router3/RouterNav‘
 3 
 4 export default class Index extends Component {
 5   render() {
 6     return (
 7       <div>
 8         <RouterNav /> //组件
 9         首页
10       </div>
11     )
12   }
13 }

2.方法二:路由嵌套,先参考本博客4.0版本的方法嵌套,不需要在各个页面引入(有空再补上)

 

 

三、路由传参第一步 和 路由嵌套第一步

 1 import React, { Component } from "react"
 2 import { Router, Route, hashHistory, IndexRoute } from "react-router"
 3 import Index from "../component/Page/Index"
 4 import Login from "../component/Page/Login"
 5 import Detail from "../component/Page/Detail"
 6 import Book from "../component/Page/Book"
 7 import Art from "../component/Page/Art"
 8 
 9 // Router:最外层容器
10 // Route:内部容器
11 // hashHistory:管理历史信息
12 // IndexRoute:默认的主页面加载
13 // Link:路由点击跳转
14 
15 export default class AppRouter extends Component {
16   render() {
17     return (
18       <div>30         <Router history={hashHistory}>
31           <Route path="/" component={Index}></Route>
32 
33           {/* 路由传参第一步 */}
34           <Route path="/login/:name/:age" component={Login}></Route>
35 
36           {/* 路由嵌套第一步:使用Route包裹子路由 */}
37           <Route path="/detail" component={Detail}>
38             {/* detail路由下有两个子页面,进入默认显示book页面 */}
39             <IndexRoute component={Book}></IndexRoute>
40             <Route path="/detail/art" component={Art}></Route>
41           </Route>
42         </Router>
43       </div>
44     )
45   }
46 }

路由传参第二步:传递具体参数

 1 import React, { Component } from ‘react‘
 2 import { Link } from ‘react-router‘
 3 
 4 export default class RouterNav extends Component {
 5   render() {
 6     const name = ‘lili‘
 7     const age = 18
 8     return (
 9       <div>
10         <ul>
11           <li>
12             <Link to=‘/‘>首页</Link>
13           </li>
14           <li>
15             {/* 路由传参第二步,向组件传递具体参数 */}
16             {/* <Link to=‘/login/dashen/123456‘>登录</Link> */}
17             {/* 使用插值表达式 */}
18             <Link to={`/login/${name}/${age}`}>登录</Link>
19           </li>
20           <li>
21             <Link to=‘/detail‘>详情</Link>
22           </li>
23         </ul>
24       </div>
25     )
26   }
27 }

路由传参第三步:完成

import React, { Component } from ‘react‘
import RouterNav from ‘../../router3/RouterNav‘

export default class Login extends Component {
  render() {
    return (
      <div>
        <RouterNav />
        {/* 路由传参第三步:获取组件传递的参数 */}
        登录{this.props.params.name + ‘----‘ + this.props.params.age}
      </div>
    )
  }
}

 

路由嵌套第二步:完成

 1 import React, { Component } from ‘react‘
 2 import RouterNav from ‘../../router3/RouterNav‘
 3 import { Link } from ‘react-router‘
 4 
 5 export default class Detail extends Component {
 6   render() {
 7     return (
 8       <div>
 9         <ul>
10           <li>
11             <Link to=‘/detail/‘>书籍</Link>
12           </li>
13           <li>
14             <Link to=‘/detail/book‘>文章</Link>
15           </li>
16         </ul>
17         <RouterNav />
18 
19         {/* 路由嵌套第二步:使用this.props.children给detail的子路由留显示位置 */}
20         {/* 注意:如果没有第一步的包裹,是没有this.props.children的,就会没有显示 */}
21         {this.props.children}
22       </div>
23     )
24   }
25 }

 

四、页面效果图(先略)

以上是关于React-router路由3.x版本用法的主要内容,如果未能解决你的问题,请参考以下文章

React学习及实例开发——用react-router跳转页面

React 使用 路由

React-Router路由跳转时render触发两次的情况。

React-router在混合应用开发中的注意事项。

React-router在混合应用开发中的注意事项。

前端技术栈:react-router,去中心化式路由