reactjs - 如果用户在 React 中登录,则重定向并显示组件
问题描述
我有一个作为公共路由的登录页面和一个作为私有路由的仪表板页面,如下所示:
应用程序.js:
function App() {
return (
<Router>
<div className="App">
<Switch>
<PublicRoute path="/" exact component={Login} />
<PrivateRoute path="/dashboard" component={Dashboard} />
</Switch>
</div>
</Router>
);
}
这是我的私有路由组件:
let store = require("store");
const PrivateRoute = ({component: Component, ...options}) => {
// const finalComponent = user != null && user.auth == true ? component : Login;
const [userData, setUserData] = useState({});
useEffect(() => {
setUserData(store.get("userData"));
}, []);
return (
<Route
{...options}
render={(props) =>
store.get("userData") ?
<Component {...props} />
:
<Redirect to="/"/>
}
/>
);
};
export default PrivateRoute;
现在我面临的问题是,如果我打开仪表板localhost:9999/dashboard
,我的任何组件都不可见,因为它们是在仪表板组件内部路由的。因此,当我打开它时,localhost:9999/dashboard
我想对重定向做出反应,localhost:9999/dashboard/home
并在用户登录时显示组件。
我试图这样做:
return (
<Route
{...options}
render={(props) =>
store.get("userData") ?
<Redirect to="/dashboard/home" component={<Component {...props}} />
:
<Redirect to="/"/>
}
/>
);
这确实路由到主页,但根本看不到任何东西。我的意思是仪表板内的组件也根本不可见。
这就是我得到的。您会看到它重定向但不显示任何内容:
解决方案
我相信您可以更具体地了解您正在显示的代码是哪个文件。
但我觉得你正在尝试完成这样的事情:
私人路由器
import React from 'react';
import { Route, Redirect } from 'react-router-dom';
const PrivateRoute = ({component: Component, restricted, ...rest}) => {
return (
<Route {...rest} render={props => (
user.auth == true ?
<Redirect to="/dashboard" />
: <Redirect to="/dashboard/home" />
)} />
);
};
export default PrivateRoute;
推荐阅读
- android - Flutter Page View 如何不总是从 initialPage 开始?
- javascript - 如何触发单击垫子菜单区域而不是整个垫子菜单按钮?
- maven - maven 解析器有问题:无法创建任务或类型解析
- javascript - puppeteer - 无限滚动页面中的内容在设置溢出后停止工作
- sql - 具有顺序演算的 LAG 函数
- focus - SDL实现鼠标悬停透明控件在linux Xlib下不生成事件
- terminal - LC-CTYPE:无法更改语言环境:没有这样的文件或目录
- html - html标签的随机背景颜色
- kubernetes - 如何不以 root 身份将 vscode 附加到正在运行的 k8s pod
- mysql - MYSQL - Max(Date) 给了我正确的日期但错误的值