字节笔记本

2026年2月22日

Fle-UI ProLayout - 高级布局组件使用指南

ProLayout 是 Fle-UI 组件库中提供的高级布局组件,专为中后台管理系统设计。它封装了 Ant Design Pro 中常见的布局模式,支持侧边栏、顶部导航、混合布局等多种模式,帮助开发者快速搭建专业级的管理后台界面。

何时使用

ProLayout 适用于以下场景:

  • 需要快速搭建中后台管理系统界面
  • 需要支持多种布局模式(侧边栏、顶部、混合)
  • 需要响应式布局,适配不同屏幕尺寸
  • 需要与 Umi 框架集成使用

与 Umi 插件配合使用

ProLayout 可以与 Umi 的 @umijs/plugin-layout 插件配合使用,实现自动化的路由菜单生成。插件会根据项目的路由配置自动生成菜单结构,无需手动维护菜单数据。

代码示例

基础使用

tsx
import { ProLayout } from '@fle-ui/pro-layout';
import { Link, useLocation } from 'umi';

export default () => {
  const location = useLocation();

  return (
    <ProLayout
      title="Fle-UI Pro"
      logo="/logo.svg"
      location={location}
      route={{
        routes: [
          { path: '/', name: '首页', icon: 'HomeOutlined' },
          { path: '/list', name: '列表页', icon: 'TableOutlined' },
        ],
      }}
      menuItemRender={(menuItemProps, defaultDom) => (
        <Link to={menuItemProps.path}>{defaultDom}</Link>
      )}
    >
      {children}
    </ProLayout>
  );
};

从服务器加载菜单

tsx
import { ProLayout } from '@fle-ui/pro-layout';
import { useState, useEffect } from 'react';

export default () => {
  const [menuData, setMenuData] = useState([]);

  useEffect(() => {
    fetch('/api/menu')
      .then(res => res.json())
      .then(data => setMenuData(data));
  }, []);

  return (
    <ProLayout
      menuDataRender={() => menuData}
    >
      {children}
    </ProLayout>
  );
};

自定义菜单内容

tsx
<ProLayout
  menuExtraRender={({ collapsed }) => (
    !collapsed && (
      <div style={{ padding: '8px 16px' }}>
        <Input.Search placeholder="搜索菜单" />
      </div>
    )
  )}
>

自定义页脚

tsx
<ProLayout
  footerRender={() => (
    <div style={{ textAlign: 'center', padding: '24px' }}>
      © 2024 Fle-UI. All rights reserved.
    </div>
  )}
>

搜索菜单

tsx
<ProLayout
  menu={{ search: true }}
>

多个路由对应一个菜单项

tsx
const route = {
  routes: [
    {
      path: '/detail',
      name: '详情页',
      hideInMenu: true,
      parentKeys: ['/list'],
    },
    {
      path: '/list',
      name: '列表页',
    },
  ],
};

默认打开所有菜单

tsx
<ProLayout
  menu={{ defaultOpenAll: true }}
>

使用 IconFont

tsx
<ProLayout
  iconfontUrl="//at.alicdn.com/t/font_8d5l8fzk5b87iudi.js"
>

Ghost 模式

Ghost 模式会移除所有自带界面元素,只保留布局框架:

tsx
<ProLayout pure>

嵌套布局

tsx
<ProLayout>
  <ProLayout route={subRoute}>
    {children}
  </ProLayout>
</ProLayout>

自定义收起按钮

tsx
<ProLayout
  collapsedButtonRender={(collapsed) => (
    <Button>{collapsed ? '展开' : '收起'}</Button>
  )}
>

API 参考

ProLayout

参数说明类型默认值
title左上角标题ReactNode'Ant Design Pro'
logo左上角 logo URLReactNode | ()=> ReactNode-
pure是否移除所有自带界面boolean-
loading布局加载状态boolean-
location当前应用会话的位置信息history.location-
menuHeaderRender渲染 logo 和标题ReactNode | (logo,title)=>ReactNode-
menuFooterRender在布局底部渲染区块(menuProps)=>ReactNode-
onMenuHeaderClick菜单头部点击事件--
menuExtraRender在菜单头部下方渲染区域(menuProps)=>ReactNode-
onTopMixMenuHeaderClick混合模式下顶部栏头部点击事件--
contentStyle内容区域样式CSSProperties-
layout布局模式side | topside
contentWidth内容宽度Fluid | FixedFluid
navTheme导航主题light | darkdark
headerTheme顶部导航主题light | darkdark
fixedHeader是否固定头部booleanfalse
fixSiderbar是否固定导航booleanfalse
breakpoint响应式布局断点breakpointlg
menu菜单配置{ locale?: boolean }-
iconfontUrlIconFont 配置URL-
iconPrefixes侧边菜单图标前缀stringicon-
locale当前布局语言zh-CN | zh-TW | en-USnavigator.language
settings布局设置Settings-
siderWidth侧边菜单宽度number208
defaultCollapsed默认折叠菜单boolean-
collapsed控制菜单折叠boolean-
onCollapse菜单折叠事件--
onPageChange页面切换触发--
headerRender自定义头部渲染--
headerTitleRender自定义头部标题方法(logo,title,props)=>ReactNode-
headerContentRender自定义头部内容--
rightContentRender自定义头部右侧内容--
collapsedButtonRender自定义折叠按钮--
footerRender自定义页脚渲染--
pageTitleRender自定义页面标题--
menuRender自定义菜单渲染--
postMenuData显示前查看菜单数据--
menuItemRender自定义菜单项渲染--
subMenuItemRender自定义子菜单项渲染--
menuDataRender自定义 menuData--
breadcrumbRender自定义面包屑数据(route)=>route-
route用于生成菜单和面包屑route-
disableMobile禁用移动端自动切换booleanfalse
links菜单右下角快捷操作ReactNode[]-
menuProps传递给 antd menu 的 propsMenuProps-
waterMarkProps水印配置WaterMarkProps-

SettingDrawer

设置面板组件,用于实时调整布局配置。

参数说明类型默认值
settings布局设置Settings-
onSettingChange设置变更事件--
hideHintAlert移除提示信息boolean-

PageLoading

页面加载组件,支持所有 antd Spin 组件参数。

RouteContext

提供路由上下文信息。

GridContent

等宽内容容器组件。

参数说明类型默认值
contentWidth内容模式Fluid | Fixed-

getMenuData

获取菜单数据的工具函数。

参数说明类型默认值
pathname当前路径location.pathname-
breadcrumb菜单数据集合MenuDataItem[]-
menu---
title标题类型string'Ant Design Pro'
formatMessagereact-intl 的 formatMessage--

常见问题

自定义布局

可以通过 headerRendermenuRenderfooterRender 等属性完全自定义布局的各个部分。

折叠展开

使用 collapsedonCollapse 控制菜单的折叠状态。

自定义菜单宽度

通过 siderWidth 属性设置侧边栏宽度,默认为 208px。

自动切割菜单

当菜单项过多时,可以使用 cutMenu 功能自动将超出部分收起。

从服务器获取菜单

使用 menuDataRender 属性可以自定义菜单数据来源,支持从服务器动态加载。

相关链接

分享: