当前位置: 首页 > 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>

相关文章:

  • js常用函数总结
  • 使用Python提取照片元数据:方法与实战指南
  • Next打包导出静态文件(纯前端),不要服务器端(node), 隐藏左下角调试模式(“next“: “^15.3.3“,)
  • python版若依框架开发:项目结构解析
  • python打卡day45
  • Qt实现一个悬浮工具箱源码分享
  • 当机械音色遇见抒情诗:IndexTTS与CosyVoice的中文语音对决
  • PS如何傻瓜式扣图、图片编辑、图片合成
  • springcloud openfeign 偶现 Caused by: java.net.UnknownHostException
  • 强化学习原理入门-2马尔科夫决策过程
  • jar包如何引入
  • C++算法动态规划1
  • Odoo电子邮件使用配置指南
  • CppCon 2015 学习:Comparison is not simple, but it can be simpler.
  • 008-libb64 你有多理解base64?-C++开源库108杰
  • AppTrace技术全景:开发者视角下的工具链与实践经验
  • GPU 图形计算综述 (三):可编程管线 (Programmable Pipeline)
  • 数据结构:递归:泰勒展开式(Taylor Series Expansion)
  • 架构师级考验!飞算 JavaAI 炫技赛:AI 辅助编程解决老项目难题
  • 单精度浮点数值 和 双精度浮点数值
  • 设置网站关键词/拉新任务接单放单平台
  • wordpress 无法在线升级/免费seo课程
  • 申请园区网站建设经费的请示/网络营销策略案例分析
  • 微网站 微信/google seo 优化招聘
  • 如何用eclipse做网站/百度搜索网站优化
  • 哪些网站是用vue做的/品牌营销的概念