reactjs - 登录页面不使用 React Router ProtectedRoute 呈现
问题描述
我有一个反应路由器应用程序:
export default () => (
<Router basename={process.env.REACT_APP_BASENAME || ""}>
<div>
{routes.map((route, index) => {
return (
<PrivateRoute
key={index}
path={route.path}
exact={route.exact}
component={props => {
return (
<route.layout {...props}>
<route.component {...props} />
</route.layout>
);
}}
/>
);
})}
</div>
</Router>
);
这将根据单击的路线呈现不同的视图。路线将基于routes.js
文件中的此对象呈现:
export default [
{
path: "/login",
layout: DefaultLayout,
component: LogIn
}, .....]
为了构建一些身份验证,我将 a 定义PrivateRoute
为:
const PrivateRoute = ({ component: Component, ...rest }) => (
<Route {...rest} render={(props) => (
fakeAuth.isAuthenticated === true
? <Component {...props} />
: <Redirect to='/login' />
)} />
)
但是,当我将应用程序设置为使用 PrivateRoute 而不是普通路由(在第一个片段中)时,重定向不使用路由对象。如何更改登录页面的 PrivateRoute const 以反映我原来的 React Route 架构?最佳做法是什么?
解决方案
我建议更改您的私人路线如下
const PrivateRoute = ({ component: Component, ...rest }) => fakeAuth.isAuthenticated === true ? (
<Route {...rest} component={component}
)} />
) : <Redirect to='/login' />;
推荐阅读
- java - 使所有 spring-boot @ConfigurationProperties 字段在应用程序启动时都是必需的,而无需注释每个字段
- html - 如何在使用 `grid-auto-flow: column` 时将 `height: auto` 设置为 CSS 网格容器?
- angular - 如何从 let i =index ( from html) 获取 app.ts 中的 i 值?#角度
- node.js - 使用 atom 在 Mac 上保存 node.js 文件的问题
- flutter - 如何制作具有屏幕尺寸的动画?
- html - 容器内文本的对齐方式
- numpy - np.where:“ValueError:操作数无法与形状一起广播(38658637,)(9456,)”
- django - 如何链接 Django 查询集并按这些查询集的不同字段对结果进行排序
- mysql - 完成mysql回调函数
- powershell - Powershell FileSystemWatcher 在一段时间后停止通知