react 路由
使用方法:
安装: yarn add react-router-dom
导入路由核心组件: import {BrowserRouter, Route, Link} from 'react-router-dom'
一个基本的路由案例:
import React from 'react'
import { BrowserRouter, Route, Link } from 'react-router-dom'
import App from './App'
import Page from './pages/demo_1'
export default function Router() {
return (
<BrowserRouter>
<App>
<Link to="/page" >点击调转到页面</Link>
<Route path="/page" component={Page} />
</App>
</BrowserRouter>
)
}
路由方式: BrowserRouter、HashRouter
Route基础用法:
1 <Route path='/admin/button' component={Button} />
2 <Route path='/admin/tabs' component={Table} />
<Route path='/admin' render={() =>{
<Admin>
<Route path='/admin/home'component ={Home} />
</Admin>
}}
/>
Link 用法:主要用在a链接当中
<Link to='/admin'>admin</Link>
<Link to='/home'>home</Link>
动态变量:
<Link to={{pathname: '/pages/:number'}} >pages #7</Link>
// 取值:this.props.match.params.number
// to 可以传一个基本的location对象,pathname:'/123', search:'', hash: '', key: 'abc1234', state: {}
NavLink: 主要用在菜单导航当中
Switch:
由于React.Router 4.0 版本的路由可以匹配多个路由, 通过用Switch 包裹,可以在匹配到第一个结果后不向下执行匹配
<Switch>
<Route path='/admin/Home' component={Home} />
<Route path='/admin/list' component={List} />
<Route path='/admin/login' component={Login} />
</Switch>
Redirect: 重定向:
<Redirect to='/admin/home' />
编程式导航:
通过JS代码来控制页面跳转
- this.props.history.push( '/home' ) 跳转到home页面
- this.props.history.go( -1 ) 返回到上一个页面
import React, { Component } from 'react'
export default class Start extends Component {
toPath = () => this.props.history.push('/page')
render() {
return (
<div>
<button onClick={() => this.toPath()}>点击跳转!</button>
</div>
)
}
}
匹配模式:
模糊匹配:
只要以pathname 开头的子路由都会匹配到,React路由默认是模糊匹配。
<Route path="/admin" component={Admin} />
<Route path="/admin/login" componnet={Login} />
// 此时即能匹配到Admin页面也能匹配到Login页面。
精确匹配:
在上面的模糊匹配中通常容易把多个页面揉合在一起展示出来。而精确匹配可以让路由更精准的匹配到某个路径上展示页面。方法是给 Route 添加 exact 属性,让其变为精确匹配模式。
<Route exact path="/" component={Page} />
<Route exact path="/admin" component={Page8} />
<Route exact path="/admin/login" component={Page8} />
// 此时只会展示某一个符合条件的页面,不会匹配到其他页面。只有路径完全符合才会展示。
路由规则
-
Route 创建的标签,就是路由规则,其中path 表示要匹配的路由,component 表示要展示的组件
-
在vue中有个 router-view 的路由标签,专门用来放置,匹配到的路由组件,但是在 react-router中,并没有类似这样的标签,而是直接在Route标签当作占位的坑
-
Route具有两种身份
- 它是路由匹配规则
- 它是占位符,表示将来要匹配到的组件都放到这个位置
-
如果要匹配参数,可以在匹配规则中,使用 : 修饰符 表示这个位置匹配到的是参数
-
如果要从路由规则中,提取匹配到的路由参数,有两种方式
-
this.props.match.params.***
-
this.state.routeParams.***
-