react-router
2020-08-06 22:05
941 查看
react-router
安装使用react-router
npm install react-router-dom --save
特点
- 秉承react一切皆组件,路由也是组件。
- 分布式的配置,分布在你的页面的每个角落。
- 包含式配置,可匹配多个路由。
使用步骤
- 引入顶层路由组件包裹根组件,index.js
import React from 'react' import ReactDom from 'react-dom' import App from './App' import { BrowserRouter } from 'react-router-dom' ReactDom.render( <BrowserRouter> <App></App> </BrowserRouter> , document.getElementById('root'))
- 引入Link组件编写路由导航
<Link to="/">首页</Link>
- to指定跳转去的路径
- 引入Route组件编写导航配置
<Route exact path="/" component={Home}></Route>
- path配置路径
- component 配置路径所对应的组件
- exact 完全匹配,只有路径完全一致时才匹配
- 编写导航对应的component组件
- Switch包裹,只会匹配一个,路由不匹配显示默认的组件
import React, { Component } from 'react' import { BrowserRouter, Route, Link, Switch } from 'react-router-dom' import test from './router01/test' import test01 from './router01/test01' import test02 from './router01/test02' function App() { return ( <div> <ul> <li> <Link to="/">test</Link> </li> <li> <Link to="/test01">test01</Link> </li> <li> <Link to="/test02">test02</Link> </li> </ul> <Switch> <Route exact path="/" component={test}></Route> <Route path="/test01" component={test01}></Route> <Route path="/test02" component={test02}></Route> <Route component={test}></Route> </Switch> </div> ) } class RouterApp extends Component { render() { return ( <div> <h1>路由测试</h1> <BrowserRouter> <App></App> </BrowserRouter> </div> ) } } export default RouterApp
路由的传参取参
一、声明式导航路由配置是配置路由参数(params传参)
- 配置
<Route path="/test/:course" component={test}></Route>
- 传递
<Link to="/test/参数">test</Link> // 或者 this.props.history.push('/test/参数')
- 获取
解构路由器对象里的match
this.props.math.params.course
二、编程式导航传递参数与获取(state传参)
- 路由上无需配置
- 传递
<Link to={{pathname:'test', state:{course: '参数'}}}>test</Link> // 或者 this.props.location.push({pathname:'test', state:{course: '参数'}})
- 获取:使用this.props.location.state接收参数
this.props.location.state
三、query传参
- 路由上无需配置
- 传递
<Link to={{pathname:'test', query:{course: '参数'}}}>test</Link> // 或者 this.props.location.push({pathname:'test', query:{course: '参数'}})
- 获取:使用this.props.location.query接收参数
this.props.location.query
路由守卫的实现和使用
- 路由守卫其实就是我们的路由拦截,当我们有一些页面需要登陆之后才有权限去访问这个时候,我们的路由守卫就可以派上用场了。
- react里的路由守卫其实也是一个组件,最后返回的还是Route组件。
// 路由守卫的实现 class RouteGuard extends Component { state = { isLogin: false // 是否登录 } render() { // 解构路由的组件和其他参数 const { component: Component, ...otherProps } = this.props return ( // 其他参数原样传回去 // 在render判断是否有权限,有就加载原组件并把参数原样传递进去,没有权限就重定向到登录界面 <Route {...otherProps} render={props => (this.state.isLogin ? <Component {...props}></Component> : <Redirect to="/login"></Redirect>)} > </Route> ) } }
相关文章推荐
- React-router 4 按需加载的实现方式及原理详解
- react路由基础(Router、Link和Route)
- React-router 要点
- React项目之路由:react-router
- 在React中使用react-router-dom
- react-router
- react-router 从 v2/v3 to v4 迁移(翻译)
- [React] React Router: Router, Route, and Link
- 从无到有-在create-react-app基础上接入react-router、redux-saga
- react withRouter
- react-router 踩坑记
- react-router引入Router时报错
- react-redux-router 一个完整项目解读(附源码)
- ReactJS & dva 项目常见报错问题与解决方法 (react-router 4)
- Webpack + react-router 按需加载
- [Redux] Adding React Router to the Project
- react-router组件通信坑
- react-router路由地址变了页面却没有跳转的解决办法
- react-router4 配合webpack require.ensure 实现异步加载的示例
- React-Router的动态加载实例与createElement