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

【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.xdnf.cn/news/12241.html

相关文章:

  • 八、Python模块、包
  • 华为OD最新机试真题-数组组成的最小数字-OD统一考试(B卷)
  • linux systemd 服务配置
  • 基础线性代数
  • Android协程学习
  • GPU加速与非加速的深度学习张量计算对比Demo,使用PyTorch展示关键差异
  • 面试总结一
  • 微服务架构下的服务注册与发现:Eureka 深度解析
  • Dify源码教程:账户和密码传递分析
  • 十六进制数字接收的方式
  • Linux程序运行日志总结
  • 面试题:SQL 中如何将 多行合并为一行(合并行数据为列)?
  • 第46节:多模态分类(图像+文本)
  • 学习路之PHP--webman安装及使用
  • 11.MySQL事务管理详解
  • 十八、【用户认证篇】安全第一步:基于 JWT 的前后端分离认证方案
  • 物流瘫痪预警:亚马逊多仓爆仓,卖家如何抢占夏季性价比市场?
  • 【Android基础回顾】五:AMS(Activity Manager Service)
  • 【Java Web】9.Maven高级
  • AI编程助手入门指南:GitHub Copilot、Cursor与Claude的安装与基础使用
  • [ Qt ] | 与系统相关的操作(三):QFile介绍和使用
  • 零碳园区:多维构建绿色标杆,开启美丽中国新纪元
  • 抑郁症患者数据分析
  • Redis大量key集中过期怎么办
  • 环境变量深度解析:从配置到内核的全链路指南
  • DAY 22 Kaggle 比赛
  • 简化复杂系统的优雅之道:深入解析 Java 外观模式
  • 无人机军用与民用技术对比分析
  • C++自定义简单的内存池
  • 数据分析实战2(Tableau)