新版本的 ProLayout 主要是样式上的升级, API 变化不是很大的
最大改变在于样式的重写,减少了 less 的导入,所以样式覆盖的功能需要重新设置
prolayout API文档 https://procomponents.ant.design/components/layout#prolayout

  1. # 最新版本 token
  2. yarn add @ant-design/pro-layout@next

image.png
在线预览 ProLayout
https://pro-components-preview-pr-4734.surge.sh/components/layout

  1. import { Avatar } from 'antd'
  2. import { UserOutlined} from '@ant-design/icons'
  3. import ProLayout, { PageContainer } from '@ant-design/pro-layout'
  4. import { useParams } from '@umijs/max';
  5. // App.propTypes = {};
  6. function App(props) {
  7. const params = useParams()
  8. return (
  9. <ProLayout
  10. title="自定义布局"
  11. menuFooterRender={(props) => {
  12. return (
  13. <a
  14. style={{
  15. lineHeight: '48rpx',
  16. display: 'flex',
  17. height: 48,
  18. color: 'rgba(255, 255, 255, 0.65)',
  19. alignItems: 'center',
  20. }}
  21. href="https://preview.pro.ant.design/dashboard/analysis"
  22. target="_blank"
  23. rel="noreferrer"
  24. >
  25. <img
  26. alt="pro-logo"
  27. src="https://procomponents.ant.design/favicon.ico"
  28. style={{
  29. width: 16,
  30. height: 16,
  31. margin: '0 16px',
  32. marginRight: 10,
  33. }}
  34. />
  35. {!props?.collapsed && 'Preview Pro'}
  36. </a>
  37. )
  38. }}
  39. onMenuHeaderClick={(e) => console.log(e)}
  40. menuItemRender={(item, dom) => (
  41. <a
  42. onClick={() => {
  43. // setPathname(item.path || '/welcome')
  44. }}
  45. >
  46. {dom}
  47. </a>
  48. )}
  49. breadcrumbRender={(routes) => {
  50. // console.log('routes', routes)
  51. return [
  52. { path: '/', breadcrumbName: '首页' },
  53. { path: '/custom-dashboard', breadcrumbName: '自定义仪表盘' },
  54. ...routes,
  55. ]
  56. }}
  57. // 右侧头像
  58. rightContentRender={() => (
  59. <div>
  60. <Avatar shape="square" size="small" icon={<UserOutlined />} />
  61. </div>
  62. )}
  63. >
  64. <PageContainer>
  65. {props.children}
  66. </PageContainer>
  67. </ProLayout>
  68. )
  69. }
  70. export default App;

prolayout design token

https://github.com/ant-design/pro-components/issues/4741
ProLayout组件特性

  1. css in js 的方案让我们可以动态的设置布局的主题
  2. 使用 Token 快速的修改组件库的基础样式

Layout 的 token

默认的 token 部分来自于 antd,可能会有一些改动,以下是 layout 依赖的部分

  1. Layout token
  2. Sider Token
  3. Header Token
  4. PageContainer Token

layout token https://procomponents.ant.design/components/layout#token

  1. const token = {
  2. header: {
  3. colorBgHeader: '#fff'
  4. },
  5. pageContainer: {
  6. marginBlockPageContainerContent: 24,
  7. marginInlinePageContainerContent: 24,
  8. colorBgPageContainer: 'rgba(255, 153, 0,0.19)'
  9. },
  10. sider: {},
  11. }

image.png

  1. rightContentRender修改为 avatarProps 和 actionsRender, 对头像模式做了默认抽象。
  2. layout=sider 模式下,header 消失,只保留了侧边栏,增大可视面积。
  3. layout=sider 模式下,header 消失后,右侧操作区域修改为左下角。
  4. 增加了 appList,用于进行多站点之前的导航

pageChange

每次在切换页面的时候,都会先走一个 loading 页面
页面切换的时候,会有一个默认的 loading,可以修改一下

  1. export default {
  2. dynamicImport: {
  3. loading: '@/pages/Loading/index',
  4. },
  5. };