react-router/react-router-dom二级目录写法

注意第一种方法是react-route,二三种方法是react-router-dom,但是第二种方法个人不推荐 目前博客的jsx语法显示有些缺陷

三种写法,第一种根据react-router但是我没有写成功

1
2
3
4
5
6
7
8
9
10
11
<Router>
<Route path="/" component={App}>
<IndexRoute component={Dashboard} />
<Route path="about" component={About} />
<Route path="inbox" component={Inbox}>
<Route path="/messages/:id" component={Message} />
{/* 跳转 /inbox/messages/:id 到 /messages/:id */}
<Redirect from="messages/:id" to="/messages/:id" />
</Route>
</Route>
</Router>

第二种,b站教学视频,可以运行正确,但是失去层级意义,代码有冗余信息 个人认为这是一种错误写法,为了要起到二级目录的效果,所有的path都要写成二级目录的形式才能生效,导致该写法Switch中直接在Children编写相同,所以不要用这种写法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<Router>
<Switch>
{/* 下面的Route组件的path没有生效
*/}
<Route path="/admin" render={
() => {
return (
<Switch>
<Route path="/admin/" component={Admin} exact />
<Route path="/admin/article" component={Article} />
{/* 下面的不能正确匹配 */}
<Route path="/articleEdit" component={ArticleEdit} />
<Route path="/dashboard" component={Dashboard} />
<Route path="/setting" component={Setting} />
</Switch>
)
}
} />
</Switch>
</Router>

第三种,嵌套一目了然,同react-router但是可运行,有层级结构,代码简洁。推荐

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<Router>
<Switch>

{/* to do 结构待优化 */}
<Route component={Home} path='/home' exact />
<Router basename="/admin">
<Switch>
<Route path="/" component={Admin} exact />
<Route path="/article" component={Article} />
{/* 下面的不能正确匹配 */}
<Route path="/articleEdit" component={ArticleEdit} />
<Route path="/dashboard" component={Dashboard} />
<Route path="/setting" component={Setting} />

</Switch>
</Router>
</Switch>
</Router>