ant design pro v5: 动态菜单渲染以及图标渲染

Pro v5目前依然是beta版本,但是老夫在俩个月前已经迫不及待的上手搞了搞,有关v5对比之前版本有哪些改变,可以说,增加了很多Pro组件,并且ProComponents一直在更新迭代;同时优化了umi-request等很多,具体可以查看官方文档

从服务端请求菜单
在某些情况下,写死的菜单数据可能满足不了我们的需求,Pro 也提供了相应的解决方案来进行远程的菜单数据请求。这里我们需要用到两个 API 来配置完成。menuDataRender 可以自定义数据格式, menu.loading 可以让 menu 展示为一个 loading 的状态。

具体的代码实现如下,我们可以在 src/app.tsx 定义 layout 对象,并且导出。

export const layout = async ({
  initialState,
}: {
  initialState: {
    settings?: LayoutSettings;
    menuData: Promise<BasicLayoutProps>;
    currentUser?: API.CurrentUser;
  };
}): BasicLayoutProps => {
  return {
    menuDataRender: (menuData) => initialState.menuData || menuData,
    ...initialState?.settings,
  };
};

这样我们就可以通过== initialState== 来完成菜单的更新工作了,我们需要在 src/app.tsx 中写入如下代码:

export async function getInitialState(): Promise<{
  settings?: LayoutSettings;
  menuData: MenuDataItem[];
}> {
  // 如果是登录页面,不执行
  if (history.location.pathname !== '/user/login') {
    const currentUser = await queryMenuData();
    return {
      menuData,
      settings: defaultSettings,
    };
  }
  return {
    menuData: [],
    settings: defaultSettings,
  };
}

实现完成之后,菜单上会出现类似FundProjectionScreenOutlined菜单管理字样,这个时候需要引入ant的icons,之后进行配置
(此方法会引入ant的所有icon,从而会导致包变大,知悉)

import * as iconMap from '@ant-design/icons';

return {
 name: lists.name,
 icon: lists.icon === null || lists.icon === 'table' ? '' : React.createElement(iconMap[lists.icon]),
 path: lists.router,
 component: lists.viewPath,
}
  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值