reactjs - 如何在 React 中构建私有路由
问题描述
我创建了一个 privateRoute 组件,只是为了像这样路由保护我的用户:
export const PrivateRoute = ({ component: Component, ...rest }: any) => {
const { user } = useAuth();
return user ? <Route {...rest} /> : <Redirect to={"/login"} />;
};
在我的 App.tsx
<Box h="78vh" as="main" display="flex" alignItems="center" mt={3}>
<Container maxW="container.lg">
<Switch>
<Route component={Home} path="/" exact />
<PrivateRoute component={Dashboard} path="/dashboard" exact />
<Route component={Login} path="/login" exact />
<Route component={Upload} path="/upload" exact />
</Switch>
</Container>
</Box>
公共路线
export const PublicRoute = ({
component: Component,
restricted,
...rest
}: any) => {
const { user} = useAuth();
return (
<Route
{...rest}
render={(props) =>
user && restricted ? (
<Redirect to="/login" />
) : (
<Component {...props} />
)
}
/>
);
};
index.tsx [条目]
<Router>
<Navbar />
<App />
<Footer />
</Router>
它当我在仪表板上包装我的 PrivateRoute 时,它不会重定向到仪表板
解决方案
问题是您排除了component
道具,只将其余道具传递给Route
. 您可以:
- 保留所有道具并将它们传递给
Route
:
export const PrivateRoute = (props: any) => {
const { user } = useAuth();
return user ? <Route {...props} /> : <Redirect to={"/login"} />;
};
- 或者传递
component
你在解构过程中得到的道具:
export const PrivateRoute = ({ component: Component, ...rest }: any) => {
const { user } = useAuth();
return user ? <Route component={component} {...rest} /> : <Redirect to={"/login"} />;
};
这实际上取决于您是否想对component
prop 做任何特别的事情,而不是将其传递给Route
组件。
推荐阅读
- python - 如何查看使用 Angular JS 生成的网页内容?
- oauth-2.0 - Oauth2 SSO 中的 Ejabberd 参与者是否有客户端
- python - 通过全局函数调用嵌套函数?
- python - Python while循环在时间间隔内执行
- python - 从 sklearn.metrics 导入 Max_Error
- android - 在片段中获取 ViewModel 时,我应该将“viewModelStore”还是“this”作为 ViewModelStore 提供给 ViewModelProvider() 方法
- google-sheets - 将宏分配给单元格而不是绘图/文本框
- javascript - 将元素对象复制到另一个对象Javascript / Angular
- c++ - 如何编写一个 C++ 正则表达式,根据某些条件识别字符串中选定的浮点数或整数?
- android - 修改或禁用 Android 应用中的 Google Smart Lock 行为