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

【react+antd+vite】优雅的引入svg和阿里巴巴图标

1.安装相关包

由于是vite项目,要安装插件来帮助svg文件引入进来,否则会失败

npm下载包 

npm i vite-plugin-svgr

vite.config.ts文件内:

import svgr from "vite-plugin-svgr";
//...
export default defineConfig({plugins: [react(),svgr({svgrOptions: {icon: true,  // 自动转换为 1em 基准尺寸replaceAttrValues: { currentColor: '{props.color}' } // 支持颜色动态传递}})],})

2.封装Icon组件

Icon.tsx文件内:

// src/components/BiliIcon.tsx
import React from 'react';
import { createFromIconfontCN } from '@ant-design/icons';// 1. 静态导入所有SVG图标(注意后面要加?react)
// @ts-ignore
import SearchIcon from '../../assets/icons/menu/search.svg?react';// 图标映射表
const svgList = {search: SearchIcon,
} ;// 2. 阿里云图标库配置 (去阿里巴巴图标库自行生成symbol 引用的在线链接)
const Iconfont = createFromIconfontCN({scriptUrl: '//at.alicdn.com/t/c/xxxxxx.js'    
});// 3. 类型定义type SvgIconName = keyof typeof svgList;interface IconProps {name:SvgIconName|`icon-${string}`;type:'svg'|'iconfont'size?: number | string;color?: string;className?: string;style?: React.CSSProperties;
}// 4. 主图标组件const Icon = (props: IconProps) => {const { type = 'svg', name, size = 20, color, className, style, ...rest } = props;if (type === 'iconfont') {return (<Iconfonttype={`${name}`}className={className}style={{fontSize: `${size}px`,color,...style}}{...rest}/>);}// @ts-ignoreconst SvgIcon = svgList[name];return SvgIcon ? (<SvgIconwidth={size}height={size}fill={color || 'currentColor'}classNa me={className}style={{verticalAlign: '-0.25em',...style}}{...rest}/>) : null;
};
export default Icon

注意要自己去阿里巴巴图标库内生成在线链接哦,这个链接的稳定性不做担保,所以最好就个人项目用用吧。

3.使用Icon组件

在其他组件内:

import Icon from '../../Icon'
//....
<Icon type={'iconfont'} name={'icon-weibo'}></Icon>
<Icon type={'svg'} color={'#fff'} size={14} name={'search'}></Icon>

http://www.lqws.cn/news/151939.html

相关文章:

  • Java在word中指定位置插入图片。
  • npm run dev 报错:Error: error:0308010C:digital envelope routines::unsupported
  • Flash烧录速度和加载配置速度(纯FPGA ZYNQ)
  • 使用ReactNative加载Svga动画支持三端【Android/IOS/Harmony】
  • FPGA 的硬件结构
  • 70年使用权的IntelliJ IDEA Ultimate安装教程
  • android 之 Tombstone
  • SSH/RDP无法远程连接?腾讯云CVM及通用服务器连接失败原因与超全排查指南
  • Mysql 身份认证绕过漏洞 CVE-2012-2122
  • 如何利用Elastic Stack(ELK)进行安全日志分析
  • 关于easyexcel动态下拉选问题处理
  • 大模型微调技术全景图:从全量更新到参数高效适配
  • 三表查询SQL怎么写?----小白初学+案例引入
  • SQL SERVER中获取外部数据的两种方法!
  • Postgresql常用函数操作
  • Flask-SQLAlchemy使用小结
  • AppWeb
  • JavaSec-XSS
  • 如何防止看板任务长期停滞不前
  • Ubuntu中常用的网络命令指南
  • html文字红色粗体,闪烁渐变动画效果
  • 在Spring Boot 3.3中使用Druid数据源及其监控功能
  • 分析vban的utlis中的helper方法(1)——数组
  • Linux-07 ubuntu 的 chrome 启动不了
  • Ubuntu ifconfig 查不到ens33网卡
  • 【Android基础回顾】三:Android启动流程
  • 44、web实验-后台管理系统基本功能
  • CentOS 7 如何pip3安装pyaudio?
  • 【ArcGIS应用】ArcGIS‌应用如何进行影像分类?
  • Eureka REST 相关接口