React Router
基本使用
安装
yarn add react-router-dom
或npm i react-router-dom
使用
导入路由核心组件
1 | import { BrowserRouter as Router, Route, Link } from "react-router-dom"; |
使用Router
包裹整个应用.
1 | <Router> |
指定路由入口和出口
1 | const First = () => <p>页面</p>; |
注意: v6 版本中将 component 替换成了 element.
常见组件
Router
包裹整个组件,一个 React 应用只使用一次.
两种常用 Router: Browser Router
和HashRouter
Link
用于指定导航链接,最终会被编译为<a>
Route
展示组件相关信息
- path 属性: 路由规则
- component 属性: 展示的组件
- Route 写在哪,渲染的组件就展示在哪
Switch(v6 已弃用)
使用Switch
包裹路由就会只加载一个匹配的路由.
注意: v6 版本使用 Routes 替换 Switch.
NavLink
作用: 选中的 Link 有class="active"
,就可以给对应的类加上样式.
其他参数
1 | <NavLink activeClassName="selected" exact |
Redirect(v6 弃用)
v6 弃用,使用 Navigate 替代.
from 是输入某个路径,to 是要跳转的路径.
1 | <Redirect from="/home" to="/" /> |
其他方法
push
和replace
区别: push
叠加, replace
直接替换.
1 | const Mine = () => { |
Navigate
场景: 首页重定向到指定路由,url 中包含该路由地址
1 | // 直接将Navigate作为element组件 |
withRouter
高阶组件,用于当前组件没有被Router
包裹,而无法拿到相关的参数.
使用withRouter(Mine)
包裹即可.
Prompt(v6 弃用)
类似钩子函数,用于跳转之前的操作
1 | <Prompt when={!!this.state.name} message={"确定离开?"} /> |
编程式导航
push(path)
push 表示跳转到某个页面,参数 path 表示要调整的路径.this.props.history.push("/home")
go(n)
前进或后退到某个页面,参数 n 表示前进或后退的页面数量
默认路由
1 | <Route path="/" component={Home} /> |
模糊匹配
React 默认使用模糊匹配,即 pathname 相同即会匹配.
精确匹配
关键字: exact
更加精准: strict
404 页面
当所有规则都没有匹配中时,设置 404 页面.即不设置规则.
简约写法
1 | <Route path="/" render={() => <Home />} /> |
参数传递
在 path 上使用path="name/:name/:id?"
,使用冒号传递,问号表示可选.
读取
props.match.params.name
其他读取方式
1 | import querystring from "querystring"; |
路由嵌套
1 | import Book from "./Book"; |