关于前端:Ant-Design-Pro自定义svg菜单图标不使用iconfont

环境和依赖

  • umi 3.5.0

场景

Ant Design Pro的文档介绍了配置菜单icon的办法,须要在 routes.ts 中设置icon属性,但只能应用antd的icon或者应用 iconFont,如果我想间接应用设计师提供的svg图片作为菜单图标,应该怎么办呢?本文提供了一种解决方案

步骤

  1. 引入须要用到的svg

    // MenuIcon.tsx
    import { ReactComponent as IconPerson } from '@/assets/icons/menu/person.svg';
    import { ReactComponent as IconHome } from '@/assets/icons/menu/home.svg';
    
    export const IconMap = {
     person: IconPerson,
     home: IconHome,
    };
  2. 编辑app.tsx

    import { IconMap } from '@/components/MenuIcon';
    import Icon from '@ant-design/icons';
    
    // ...
    export const layout: RunTimeLayoutConfig = ({ initialState }) => {
     return {
     // ...
     menuDataRender: (menuData) => {
       return menuData.map((item) => {
         return {
           ...item,
           icon:
             typeof item.icon === 'string' && item.icon.indexOf('|svg') > -1 ? (
               <Icon component={IconMap[item.icon.replace('|svg', '')]} style={{ fontSize: 14 }} />
             ) : (
               item.icon
             ),
         };
       });
     },
     // ...
     };
    };
    // ...
  3. 在route.ts中配置icon

    export default [
     {
       path: '/home',
       name: '首页',
       icon: 'home|svg',
       component: './personnel-management/index',
     },
     {
       path: '/personnel-management',
       name: '人员治理',
       icon: 'person|svg',
       component: './personnel-management/index',
     },
    ];

小提示

要使得svg图片的色彩可能依据菜单状态变动,设计师提供的svg不能写死色彩哦

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理