【发布时间】:2020-04-09 14:26:40
【问题描述】:
当我的应用程序初始化并在端口 3000 上启动时,我面临 Reactjs 中受保护路由的问题。第一次它不会重定向到登录组件。我还编写了逻辑,在没有身份验证的情况下,它首先进入登录组件,然后如果我手动输入路径“/user/login”,则显示登录组件。
我的布局组件
import React from 'react';
import { connect } from 'react-redux';
import Loadable from 'react-loadable';
import { BreadcrumbsItem } from 'react-breadcrumbs-dynamic';
import { Switch, Route, withRouter } from 'react-router-dom';
import { MAINTENANCE_MODE } from '../../common/constants';
import classes from './Layout.view.scss';
import ProtectedComponent from '../../components/ProtectedComponent';
const Loading = () => 'Loading...';
const Auth = Loadable({
loader: () => import('../auth/Auth.container'),
loading: Loading,
});
const Maintenance = Loadable({
loader: () => import('../../components/Maintenance/Maintenance'),
loading: Loading,
});
const Dashboard = Loadable({
loader: () => import('../dashboard/views/dashboard'),
loading: Loading,
});
const Layout = () => {
return (
<>
<BreadcrumbsItem to="/" key="layout-breadcrumb">
Home
</BreadcrumbsItem>
<div className={classes.layout}>
<div className={classes.main}>
<div className={classes.pageContent}>
{MAINTENANCE_MODE === 'Yes'
? <Route path="/" component={Maintenance} />
: (
<Switch>
<Route
exact
path="/user/login"
component={Auth}
/>
<ProtectedComponent
path="/dashboard"
component={Dashboard}
/>
</Switch>
)}
</div>
</div>
</div>
</>
);
};
Layout.defaultProps = {};
Layout.propTypes = {};
const mapStateToProps = () => ({});
export default withRouter(connect(mapStateToProps)(memo(Layout)));
我的受保护路由组件
import React from 'react';
import { get } from 'lodash';
import PropTypes from 'prop-types';
import { Route, Redirect } from 'react-router-dom';
import storage from '../common/storage';
const ProtectedComponent = ({ component: Component, isAuthenticated }) => (
<Route
render={() => (
(isAuthenticated || get(storage.get('user'), 'token'))
? <Component />
: <Redirect to="/user/login" />
)}
/>
);
ProtectedComponent.defaultProps = {
isAuthenticated: false,
};
ProtectedComponent.propTypes = {
component: PropTypes.any.isRequired,
isAuthenticated: PropTypes.bool,
};
export default ProtectedComponent;
【问题讨论】:
标签: javascript reactjs