跳到内容
+

页面容器

一个包裹页面内容并提供标题、面包屑和页面操作的组件。

PageContainer 是仪表盘内容理想的包装器。它显示当前页面标题,并提供面包屑以导航回当前层级结构。它通过在底层使用 Material UI Container 组件使您的页面具有响应性。

就像 DashboardLayout 一样,PageContainer 使用在 AppProvider 中定义的导航结构来构建其面包屑和标题。

页面内容
Enter 开始编辑

标题和面包屑

面包屑是通过将当前路径名与 AppProvider 中定义的导航结构匹配而形成的。匹配段落的标题用作页面标题。您可以使用 title 属性覆盖页面标题。

例如,在以下导航结构下

<AppProvider
  navigation={[
    {
      segment: 'home',
      title: 'Home',
      children: [
        {
          segment: 'orders',
          title: 'Orders',
        },
      ],
    },
  ]}
>
  ...
</AppProvider>

当您访问路径 /home/orders 时,面包屑包含 ACME / 首页 / 订单,并且页面标题为 订单

动态路由

当您在动态路由上使用 PageContainer 时,您可能希望设置属于特定路径的标题和面包屑。您可以使用 PageContainertitlebreadcrumbs 属性来实现这一点

Enter 开始编辑

您可以使用 useActivePage Hook 来检索活动页面的标题和面包屑。这样您就可以扩展现有值。

import { useActivePage } from '@toolpad/core/useActivePage';
import { Breadcrumb } from '@toolpad/core/PageContainer';

// Pass the id from your router of choice
function useDynamicBreadcrumbs(id: string): Breadcrumb[] {
  const activePage = useActivePage();
  invariant(activePage, 'No navigation match');

  const title = `Item ${id}`;
  const path = `${activePage.path}/${id}`;

  return [...activePage.breadcrumbs, { title, path }];
}

例如,在 Next.js App Router 下,您将能够按如下方式获取动态路由的面包屑

// ./src/app/example/[id]/page.tsx
'use client';

import { useParams } from 'next/navigation';
import { PageContainer } from '@toolpad/core/PageContainer';
import invariant from 'invariant';
import { useActivePage } from '@toolpad/core/useActivePage';

export default function Example() {
  const params = useParams<{ id: string }>();
  const activePage = useActivePage();
  invariant(activePage, 'No navigation match');

  const title = `Item ${params.id}`;
  const path = `${activePage.path}/${params.id}`;

  const breadcrumbs = [...activePage.breadcrumbs, { title, path }];

  return (
    <PageContainer title={title} breadcrumbs={breadcrumbs}>
      ...
    </PageContainer>
  );
}

响应性

Page Container 组件继承了 Material UI Container 组件的属性。您可以使用其 maxWidthfixed 属性来控制页面的边界。将 maxWidth 设置为 false 以完全禁用容器,并使内容一直延伸到页面边缘。

独立页面标题

PageContainer 中包含的 PageHeader 组件可以单独导入和使用,如果您希望这样做以获得更大的自定义自由度。

页面内容
Enter 开始编辑

操作

您可以在右侧保留的区域中配置其他操作。为此,请为 PageContainer 组件提供自定义的 header 插槽,您可以在其中为 PageHeader 提供自定义的 toolbar 插槽。您可以包装 PageHeaderToolbar 组件以创建自定义工具栏组件,如下所示

天气

当前状态活动

温度

24°C

降水

5%

18公里/小时

Enter 开始编辑

全尺寸内容

容器内的内容可以占据所有剩余的可用区域,样式如 flex: 1height: 100%

Enter 开始编辑

API

请参阅下面的文档,以获得此处提及的所有组件的完整属性和类参考。