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

【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.lryc.cn/news/2401644.html

相关文章:

  • 3D动画在微信小程序的实现方法
  • 计算机网络 | 1.2 计算机网络体系结构与参考模型
  • 网心云 OEC/OECT 笔记(1) 拆机刷入Armbian固件
  • 【Web应用】若依框架:基础篇17二次开发-项目名称修改-新建业务模块
  • C获取unix操作系统的信息
  • MQTT入门实战宝典:从零起步掌握物联网核心通信协议
  • 05【Linux经典命令】Linux 用户管理全面指南:从基础到高级操作
  • POP3、IMAP、SMTP:三大邮件协议核心差异与应用场景解析
  • HarmonyOS5 仓颉入门:和 ArkTs 互操作
  • 【Git 合并冲突解决记录:从 “refusing to merge unrelated histories“ 到批量冲突处理】
  • 使用vite-plugin-html在 HTML 文件中动态注入数据,如元数据、环境变量、标题
  • Kinova机械臂在Atlas手术导航系统中的核心作用
  • C++——智能指针 auto_ptr
  • .Net Framework 4/C# System.IO 命名空间(文件的输入输出)
  • 图像分类进阶:从基础到专业 (superior哥AI系列第10期)
  • 性能优化之SSR、SSG
  • 【C语言】字符与字符串
  • 经典算法:回文链表
  • uboot移植之GPIO上电初始状态的调整
  • PasteForm(ABP)框架之实现更加灵活的类似多租户的归属过滤功能,比如只能查看自己的相关数据
  • 本地id_rsa.pub输入到服务器~/.ssh/authorized_keys后,依然需要输入密码的解决办法
  • 【设计模式-3.7】结构型——组合模式
  • Unity Mac 笔记本操作入门
  • 实时数据仓库是什么?数据仓库设计怎么做?
  • Linux(12)——基础IO(下)
  • WPF可拖拽ListView
  • rocketmq索引
  • [蓝桥杯]倍数问题
  • 定时任务的 cron 表达式
  • 【MySQL】 约束