我有一个页面布局与3个独立的部分:侧栏,标题和正文.我希望从子路由填充主体,而父路由定义头部或侧边栏-但在try 使用提供者和上下文方法后,我找不到正确的方法.
以下是我想要实现的基线/伪代码:
示例布局:
Layout.tsx
export function DefaultLayout() {
return (
<div className="sidebar">
<!-- sidebar content goes here -->
</div>
<div className="page">
<div className="page-header">
<!-- header content goes here -->
</div>
<div className="page-body">
<Outlet />
</div>
</div>
);
}
路由示例:
路由
import { Route } from "react-路由-dom";
<Route element={<DefaultLayout />}>
<Route
path="/dashboard"
sidebar={<DefaultSidebar />}
header={<DashboardHeader />}
>
<Route path="home" element={<DashboardHomePage />}>
<Route path="stats" element={<DashboardStatsPage />}>
<Route path="help" element={<DashboardHelpPage />}>
</Route>
<Route path="/user" sidebar={<UserSidebar />} header={<UserHeader />}>
<Route path="overview" element={<UserOverviewPage />}>
<Route path="accounts" element={<UserAccountsPage />}>
</Route>
</Route>
如上面的简化示例所示,我希望在父路由中定义总体布局,同时在嵌套路由中"填充"布局区段.sidebar={}
和header={}
只是本例的伪代码,我意识到它可能是另一个element={}
包装器的一部分.
我try 过通过创建一个<SidebarProvider>
和<HeaderProvider>
组件来解决这个问题,使用类似useOutletContext
的组件并向下传递状态,但这似乎不起作用,而且很快变得非常复杂(无限循环,等等).
那么,从头开始:有什么方法可以实现上述行为?如果是通过Provider ,我应该如何组织它们?
Edit:为了澄清混淆:我想要将布局、侧边栏、标题和路由(包含正文)分离.我认为这对于提供者来说应该是可能的,因为我发现了在类似情况下使用提供者的例子,只是为了设置一个页面标题,当我试图用多个元素来扩展它们时,这些标题似乎不起作用.包含侧边栏和页眉的提供者示例会是什么样子?
本质上:我想从子路由向父路由传递2个元素.我该怎么做?