reactjs - 在私人路线上使用布局反应
问题描述
我试图将布局传递给我的私有路由组件,但我不能,布局没有渲染,如果我直接使用布局,它会影响所有路由,而不仅仅是他们的子路由。
我有这段代码,它将布局应用于所有路线:
return (
<Router>
<OnlyGuest path="/signin" component={SignIn}/>
<DefaultLayout>
<PrivateRoute exact path="/" component={Dashboard} />
<PrivateRoute path="/active-operations" component={ Active } />
<PrivateRoute path="/pending-operations" component={ Pending } />
<PrivateRoute path="/approved-operations" component={ Approved } />
<PrivateRoute path="/to-check-operations" component={ ToCheck } />
<PrivateRoute path="/rejected-operations" component={ Rejected } />
<PrivateRoute path="/create-operation" component={OperationCreate} />
</DefaultLayout>
</Router>
);
当我这样做时,很多教程怎么说,对我不起作用,布局不会呈现:
return (
<Router>
<OnlyGuest path="/signin" component={SignIn}/>
<Route component={DefaultLayout}>
<PrivateRoute exact path="/" component={Dashboard} />
<PrivateRoute path="/active-operations" component={ Active } />
<PrivateRoute path="/pending-operations" component={ Pending } />
<PrivateRoute path="/approved-operations" component={ Approved } />
<PrivateRoute path="/to-check-operations" component={ ToCheck } />
<PrivateRoute path="/rejected-operations" component={ Rejected } />
<PrivateRoute path="/create-operation" component={OperationCreate} />
</Route>
</Router>
);
我的 PrivateRoute 组件具有以下代码:
const PrivateRoute = ({ component: Component, ...rest }) => (
<Route {...rest} render={(props) => (
checkAuth() === true
? <Component {...props} />
: <Redirect to='/signin' />
)} />
);
我添加了默认布局,它检索子组件以呈现路线:
export default function DefaultLayout(props) {
const classes = useStyles();
return (
<div className={classes.root}>
<Container maxWidth="lg" className={classes.container}>
{ props.children }
</Container>
</div>
);
}
当我想要的时候,我该如何在路线中使用 DefaultLayout?
在这里你可以找到我的实际代码,以及它是如何工作的。
https://stackblitz.com/edit/react-diicmg
您可以将 isAuth 变量更改为 true 或 false 以查看问题。DefaultLayout 始终在屏幕中:c
解决方案
您的实现(在 StackBlitz 中)的问题是正在渲染多个路由,这就是为什么DefaultLayout
即使您只使用DefaultLayout
. 您可以使用Switch组件仅渲染单个或一组路由。如果没有Switch
,类似的路由/
可以呈现多个路由,如链接文档中更详细描述的那样:
<Router>
<Switch>
<OnlyGuest path="/signin" component={SignIn} />
<DefaultLayout>
<PrivateRoute exact path="/" component={Dashboard} />
</DefaultLayout>
</Switch>
</Router>
这是一个工作示例。切换 auth 的值以查看SignIn
没有DefaultLayout
.
希望这会有所帮助!
推荐阅读
- itext - 使用 itextsharp 从 pdf 中删除文本
- r - 尝试安装 rmarkdown 包给了我错误
- javascript - 如何设置前端访问express中的路由?
- powershell - 在 windows powershell ISE 中,尝试批量更新人员信息。我收到此错误消息
- java - 使用 Maven 使 Janino 的 2 个版本一起用于 Junit 测试
- android - 在 RecyclerView 中的单元格之间添加空间?
- python - 如何将长度不等的数组的元素复制到另一个?
- c++ - 如何在 3D 环境中移动物体?
- c# - 如何在本地服务器中托管使用 ASP.NET 核心 MVC 制作的 WebApp,但使其在线?
- stripe-payments - Stripe Payment 也在检测其他提交的表单并且工作两次