【React系列】React-Router的嵌套路由那些事儿~
在上篇文章中,我们了解了React-Router的基本用法,但是在实际的路由场景中,嵌套路由 是十分常见的,因此本篇文章准备就 嵌套路由 的场景,讲解如何使用React-Router来解决,废话不多说,开搞!
什么是嵌套路由
对于一个url只展示一个路由组件的场景,在理解上是最简单的,因为就是一个简单的一对一关系,没有其它的东西,但是在实际的场景中,嵌套路由 其实才是最普遍的,对于它,我们可以简单地理解为一个url对应 多个 路由组件,多个路由组件共同组成了页面,这些路由组件之间存在 包含与被包含 的关系,通过合理的组件拆分,可以搭建出一个便于扩展与维护的路由系统
举一个实际的使用场景,通常对于 后台管理系统 的路由搭建,我们都会采取嵌套路由的方案来解决,管理系统的界面我们通常会分为两个部分:
这两个部分本身组成一个 一级路由,内容区域根据导航栏的选择,渲染 二级路由 的内容,这就是一个嵌套路由的简单应用
React-Router中,如何使用嵌套路由
在React-Router中,使用嵌套路由十分简单,下面给出代码示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| import React from 'react' import {HashRouter,Route,Switch,Link} from 'react-router-dom' import welcome from './components/welcome' import Nest from './components/Nest'
const App = ()=>{ return ( <HashRouter> <Link to="/nest/A">/nest/A</Link> <Switch> <Route path='/nest' component={Nest}></Route> <Route exact path='/' component={welcome}></Route> </Switch> </HashRouter> ) }
export default App
import {Switch,Route,useRouteMatch} from 'react-router-dom' import A from './A' export default function Nest(){ const {path} = useRouteMatch() return ( <> <p>this is nest</p> <Switch> <Route path={`${path}/A`} exact component={A}></Route> </Switch> </> ) }
export default function A(){ return ( <p>this is A</p> ) }
|
通过代码示例,我们可以知道在React-Router中实现嵌套路由十分简单,没有什么需要深挖的地方,但是有两点还是单独说明下:
- 父级路由不能加 exact,不然无法正确导航
- 在匹配子级路由时,必须 全路径匹配,也就是需要带上父级路径,这一点在v6版本中已得到优化
结语
虽然嵌套路由原理很简单,但是必须得掌握,这样我们才能应对实际的开发场景,好啦,就写到这啦,完结,撒花🎉~