字
字节笔记本
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 URL | ReactNode | ()=> 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 | top | side |
| contentWidth | 内容宽度 | Fluid | Fixed | Fluid |
| navTheme | 导航主题 | light | dark | dark |
| headerTheme | 顶部导航主题 | light | dark | dark |
| fixedHeader | 是否固定头部 | boolean | false |
| fixSiderbar | 是否固定导航 | boolean | false |
| breakpoint | 响应式布局断点 | breakpoint | lg |
| menu | 菜单配置 | { locale?: boolean } | - |
| iconfontUrl | IconFont 配置 | URL | - |
| iconPrefixes | 侧边菜单图标前缀 | string | icon- |
| locale | 当前布局语言 | zh-CN | zh-TW | en-US | navigator.language |
| settings | 布局设置 | Settings | - |
| siderWidth | 侧边菜单宽度 | number | 208 |
| 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 | 禁用移动端自动切换 | boolean | false |
| links | 菜单右下角快捷操作 | ReactNode[] | - |
| menuProps | 传递给 antd menu 的 props | MenuProps | - |
| 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' |
| formatMessage | react-intl 的 formatMessage | - | - |
常见问题
自定义布局
可以通过 headerRender、menuRender、footerRender 等属性完全自定义布局的各个部分。
折叠展开
使用 collapsed 和 onCollapse 控制菜单的折叠状态。
自定义菜单宽度
通过 siderWidth 属性设置侧边栏宽度,默认为 208px。
自动切割菜单
当菜单项过多时,可以使用 cutMenu 功能自动将超出部分收起。
从服务器获取菜单
使用 menuDataRender 属性可以自定义菜单数据来源,支持从服务器动态加载。
相关链接
分享: