reactjs - ReactRouter 4 在其他路由上重定向到主页
问题描述
在我的 React 应用程序上,如果用户已登录,我想显示一组组件,如果未登录另一组组件。现在我想将任何其他路径重定向到GuestUser
也是确切路径之一的组件。
<Router>
<React.Fragment>
<Header />
{LoggedIn? (
<div className="app-content">{this.getRoutes()}</div>
) : (
<div className="app-content">{this.getGuestRoutes()}</div>
)}
<Footer />
</React.Fragment>
</Router>
Guest Routes
就像_
private getGuestRoutes() {
return (
<React.Fragment>
<Route path={'/:id'} exact component={GuestUser} />
<Route path={'/:id/policy'} exact component={...}/>
<Route path={'/:id/signIn'} exact component={...} />
<Route component={GuestUser} />
</React.Fragment>
);}
在许多问题中,我看到写作<Route component={GuestUser} />
应该在任何其他路径上呈现GuestUser
组件,而不是确切的路径。但我看到的是,该GuestUser
组件呈现在每条路径上其他组件的底部/下方。
问题出在这里React.Fragment
吗?
除了确切路径之外,应该如何在任何其他路径上重定向/渲染特定组件?
解决方案
您必须用 s 包装您<Route>
的 s<Switch>
以确保只有其中一个会被渲染。
import { Route, Switch } from 'react-router-dom'
<Switch>
<Route path={'/:id'} exact component={GuestUser} />
<Route path={'/:id/policy'} exact component={...}/>
<Route path={'/:id/signIn'} exact component={...} />
<Route component={GuestUser} />
</Switch>
推荐阅读
- flutter - How to return different MaterialApp widgets from FutureBuilder
- javascript - 如何将表格单元格变成显示隐藏列内容的可点击链接?
- javascript - 控制台执行的脚本运行但 tabs.executescript 没有
- javascript - 如何使 Discord.js-commando 命令只能由具有我提供的用户 ID 的人使用?
- android - 蓝牙连接线程在连接后立即关闭套接字
- javascript - 无法在 javascript 中显示叠加层,但可以在 jquery 中显示
- ios - 如何在不使用 UINavigationController 的情况下以编程方式进入 rootViewController
- gradle - IntelliJ 项目“JS 客户端和 JVM 服务器 | Gradle”不起作用
- sql - 记录访问性能明智
- python - 如果我可以根据需要在 __init__ 之后简单地添加尽可能多的 self.agrument,为什么类需要参数(参数)?