gpt4 book ai didi

reactjs - Reactjs 中的简单条件路由

转载 作者:行者123 更新时间:2023-12-03 13:01:21 25 4
gpt4 key购买 nike

如何实现条件路由,即当且仅当满足某些条件时,才会发生路由。例如,当且仅当用户输入正确的凭据时,登录才会成功,并且用户应该能够看到欢迎页面。

如果我们直接点击诸如 localhost:8080/welcome 这样的 URL,则不应导航到欢迎页面。欢迎页面仅在登录后显示。

如何实现这一目标,有人可以帮助我吗?

App.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;

最佳答案

为了帮助回答您的问题,我认为您可能还需要询问如何该路由应该被阻止。通过上面的示例,您还没有一种机制可以帮助回答“我是否应该能够访问此页面”的问题。这可能来自于状态、redux 或其他一些确定用户是否登录的方法。

由于 react-router 只是普通的 React(我最喜欢的部分之一!!),因此您拥有所有可用的工具,您可以有条件地显示任何部分您的 React 应用程序的一部分。

以下是您如何实现这一目标的几个示例(这绝不是详尽无遗的。要有创意!这完全取决于您的要求和您使用的工具)

class AllRoutes extends Component{
render(){
return(
<Switch>
<Route exact path="/login" component={Login} />
<Route exact path="/signup" component={SignUp} />
{ this.state.authenticated &&
<Route exact path="/Welcome" component={Welcome} />
}
</Switch>
);
}
}

我最喜欢的实现此目的的方法之一是创建一个 ProtectedRoute 组件

class ProtectedRoute extends Component {
render() {
const { component: Component, ...props } = this.props

return (
<Route
{...props}
render={props => (
this.state.authenticated ?
<Component {...props} /> :
<Redirect to='/login' />
)}
/>
)
}
}

class AllRoutes extends Component {
render() {
return (
<Switch>
<Route path='/login' component={Login} />
<ProtectedRoute path='/welcome' component={Welcome} />
</Switch>
)
}
}

虽然我没有包含任何关于如何设置 state.authenticated 的具体逻辑,但这可能来自任何地方(绝不需要来自 state )。尽力回答“如何确定用户是否通过身份验证”的问题,并使用该机制作为处理路由身份验证的手段。

关于reactjs - Reactjs 中的简单条件路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48497510/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com