当前位置: 首页 > news >正文

在React中使用动态图标

背景

需要按名称引入图标

安装

yarn add react-icons

实现

import loadable from "@loadable/component"
import { IconBaseProps, IconType } from "react-icons/lib"interface typesPropsIcon {nameIcon: string;propsIcon?: IconBaseProps
}export function Icon({ nameIcon, propsIcon }: typesPropsIcon): JSX.Element {const lib = nameIcon.replace(/([a-z0-9])([A-Z])/g, '$1 $2').split(" ")[0].toLocaleLowerCase();const ElementIcon: IconType = loadable(() => import(`react-icons/${lib}/index.js`), {resolveComponent: (el: JSX.Element) => el[nameIcon as keyof JSX.Element]});return (<span style={{paddingRight: 6}}><ElementIcon {...propsIcon} style={{size: '1em'}}/></span>)

示例

<Space direction="horizontal"><Menumode="inline"    style={{ width: 500, height:'fit-content' }}    items={[{ key: 'mail', label: 'Mail1', icon: <MailOutlined />, type:'group' },{ key: 'mail2', label: 'Mail2', icon: <Icon nameIcon="AiFillBug" propsIcon={{ size: 20 }} /> },{ key: 'mail3', label: 'Mail3', icon: <Icon nameIcon="AiFillInsurance" propsIcon={{ size: 20 }}/> },{ key: 'mail4', label: 'Mail4', icon: <Icon nameIcon="AiFillDollarCircle" propsIcon={{ size: 20 }}/> },{ key: 'mail5', label: 'Mail5', icon: <Icon nameIcon="AiOutlineApartment" propsIcon={{ size: 20 }}/> },]}        />      <Menumode="inline" style={{ width: 256, height:'fit-content', marginLeft: 4}}          items={[{ key: 'mail11', label: ' Mail1', icon: <Icon nameIcon="BiAperture" propsIcon={{ size: 20 }}/>, type:'group' },{ key: 'mail21', label: ' Mail2', icon: <Icon nameIcon="CiBasketball" propsIcon={{ size: 20 }}/> },{ key: 'mail31', label: ' Mail3', icon: <Icon nameIcon="CiBadgeDollar" propsIcon={{ size: 20 }}/> },{ key: 'mail41', label: ' Mail4', icon: <Icon nameIcon="CiBoxList" propsIcon={{ size: 20, marginRight: 80, marginBottom: 10 }}/> },{ key: 'mail51', label: ' Mail5', icon: <ClusterOutlined /> },]}        />      </Space>

相关文章:

  • C#学习相关系列之yield和return的区别
  • 智慧物联|消防物联网监管指挥平台实现对物联网消防警情的全面监测和智能管理
  • 深入理解模板引擎:解锁 Web 开发的新境界(上)
  • SpringBoot 属性配置解析
  • VSCode配置记录
  • 手把手教你写 Compose 动画 -- 过渡动画 API:Transition
  • 微信小程序 - PC端选择ZIP文件
  • 《Vue.js设计与实现》—Vue3响应系统的原理
  • 腾讯地图系列(二):微信小程序添加插件(三种方法)以及插件AppId获取
  • ArcGIS无法绘制一个或多个图层
  • 基于以太坊的智能合约开发Solidity(数组提升篇)
  • 智能时代:互联网+如何改变我们的生活与工作
  • STM32CubeIDE串口空闲中断实现不定长数据接收
  • 华为OD机试真题-智能成绩表-2023年OD统一考试(C卷)
  • 线性代数入门与学习笔记
  • 【Leetcode】101. 对称二叉树
  • Docker: 容器互访的三种方式
  • Invalidate和postInvalidate的区别
  • Java比较器对数组,集合排序
  • JS数组方法汇总
  • js学习笔记
  • MySQL主从复制读写分离及奇怪的问题
  • RedisSerializer之JdkSerializationRedisSerializer分析
  • Storybook 5.0正式发布:有史以来变化最大的版本\n
  • Vue.js-Day01
  • vue数据传递--我有特殊的实现技巧
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 老板让我十分钟上手nx-admin
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 面试总结JavaScript篇
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • 用quicker-worker.js轻松跑一个大数据遍历
  • 怎么把视频里的音乐提取出来
  • - 转 Ext2.0 form使用实例
  • 东超科技获得千万级Pre-A轮融资,投资方为中科创星 ...
  • #单片机(TB6600驱动42步进电机)
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • (3)Dubbo启动时qos-server can not bind localhost22222错误解决
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (动态规划)5. 最长回文子串 java解决
  • (力扣题库)跳跃游戏II(c++)
  • (篇九)MySQL常用内置函数
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (五)c52学习之旅-静态数码管
  • (一)Java算法:二分查找
  • (原)本想说脏话,奈何已放下
  • (转)c++ std::pair 与 std::make
  • .gitignore文件设置了忽略但不生效
  • .NET CF命令行调试器MDbg入门(一)
  • .NET Compact Framework 多线程环境下的UI异步刷新
  • .net mvc部分视图
  • .NET 中使用 Mutex 进行跨越进程边界的同步
  • .net操作Excel出错解决