如何实现条件路由,即当且仅当某些条件满足时,才会发生路由。例如,当且仅当用户输入正确的凭据时,登录应该成功并且用户应该能够看到欢迎页面。
如果我们直接点击 localhost:8080/welcome
类的 URL,则不应导航到欢迎页面。欢迎页面只应在登录后显示。
如何实现这一点,有人可以帮助我吗?
应用程序.js
import React, { Component } from 'react';
import Header from './Header';
class App extends Component{
render(){
return(
<div>
<Header />
</div>
);
}
}
export default App;
页眉.js
import React, { Component } from 'react';
import {Link} from 'react-router-dom';
import Login from './Login';
import SignUp from './SignUp';
class Header extends Component{
render(){
return(
<div>
<nav class="navbar navbar-default">
<div class="container-fluid">
<ul class="nav navbar-nav">
<li><Link to={Login}>Login</Link></li>
<li><Link to={Login}>SignUp</Link></li>
</ul>
</div>
</nav>
</div>
);
}
}
export default Header;
AllRoutes.js
import React, { Component } from 'react';
import { Switch, Route } from 'react-router-dom';
import Login from './Login';
import SignUp from './SignUp';
import Welcome from './Welcome';
class AllRoutes extends Component{
render(){
return(
<Switch>
<Route exact path="/login" component={Login} />
<Route exact path="/signup" component={SignUp} />
<Route exact path="/Welcome" component={Welcome} />
</Switch>
);
}
}
export default AllRoutes;
欢迎.js
import React, { Component } from 'react';
class Welcome extends Component{
render(){
return(
<div>
<h2>Welcome to MainPage..</h2>
</div>
);
}
}
export default Welcome;
原文由 Srikanth Gowda 发布,翻译遵循 CC BY-SA 4.0 许可协议
为了帮助回答您的问题,我认为您可能还需要询问该路线应该 如何 被阻止。通过上面的示例,您还没有一种机制可以帮助回答“我应该能够访问此页面”的问题。这可能来自
state
、redux 或其他确定用户是否登录的方法。由于
react-router
只是简单的 React(我最喜欢的部分之一!!),您拥有所有可用的工具,您可以有条件地显示您的 React 应用程序的 任何 部分。以下是您如何实现这一目标的几个示例(这绝不是详尽无遗的。要有创意!这完全取决于您的要求和您使用的工具)
我最喜欢的方法之一是创建一个
ProtectedRoute
组件虽然我没有包含任何关于如何设置
state.authenticated
的具体逻辑,但这可能来自任何地方(绝不需要来自state
)。尽力回答“我如何确定用户是否经过身份验证”的问题,并使用该机制作为处理路由身份验证的手段。