react引入iconfont的svg图标

react引入iconfont的svg图标

本文目录

普通图标

通过link引入css
<link rel="stylesheet" href="/src/assets/iconfont/iconfont.css">
组件内引入css
import "@/assets/iconfont/iconfont.css";
使用
<i className="iconfont icon-zhuye"></i>

svg图标

通过script引入js

index.html引入js文件

<html lang="en">
  <head>
    ...
  </head>
  <body>
    <div id="root"></div>
    <script type="module" src="/src/main.tsx"></script>
    <script src="/src/assets/iconfont/iconfont.js"></script>
  </body>
组件内引入js
import "@/assets/iconfont/iconfont.js"
使用
import "./about.css";

<svg className="icon" aria-hidden="true">
  <use xlinkHref="#icon-zhuye1"></use>
</svg>

/* about.css */
.icon {
  width: 1em;
  height: 1em;
  vertical-align: -0.15em;
  fill: currentColor;
  overflow: hidden;
}

通过封装组件

自定义封装
import React from 'react';
import "@/assets/iconfont/iconfont.js"
import './about.css';

// 定义Props接口
interface SvgIconProps {
  icon: string; // 必须的属性
  color?: string; // 可选属性
  size?: string | number; // 可以是字符串或数字
  className?: string; // 可选字符串
  style?: React.CSSProperties; // React内置的CSSProperties类型用于样式对象
  svgClass?: string; // 用于额外的SVG CSS类
}

class SvgIcon extends React.Component<SvgIconProps> {
    static defaultProps: Partial<SvgIconProps> = {
        size: '2.67em', // 默认大小
        svgClass: 'svg-icon' // 默认SVG类名
    }

    render() {
        const { svgClass, className, style, color, size, icon } = this.props;
        const iconSize = typeof size === 'number' ? `${size}em` : size;
        const iconName = `#icon-${icon}`; // 构建用于<use>标签的href属性值

        return (
            <svg className={`${svgClass} ${className || 'icon'}`}
                 style={{ fill: color, width: iconSize, height: iconSize, ...style }}
                 aria-hidden="true">
                <use href={iconName}></use>
            </svg>
        );
    }
}

export default SvgIcon;
组件中调用
import SvgIcon from './SvgIcon';

<SvgIcon icon="zhuye" size="24px" />

通过antd

封装

需要把iconfont放在public目录下,通过antd的createFromIconfontCNscriptUrl本质是通过网络资源get获取

import { createFromIconfontCN } from '@ant-design/icons';
// import { icon } from '@/assets/iconfont/iconfont.js'

const IconFont = createFromIconfontCN({
    scriptUrl: '/public/iconfont/iconfont.js'
});
 
export default IconFont;
使用
import IconFont from './IconFont';

<IconFont type="icon-zhuye" style={{ fontSize: '24px' }} />
相关推荐
AI视觉网奇1 小时前
生成视频 zeroscope_v2_576w 学习笔记
开发语言·前端·javascript
m0_644222611 小时前
HarmonyOS角落里的知识:一杯冰美式的时间 -- DragView
前端·华为·harmonyos·鸿蒙开发
繁依Fanyi2 小时前
将 Aira2 集成到 Go项目中
开发语言·前端·javascript·网络·后端·python·golang
wusp19942 小时前
ECharts 词云案例三:2024年阅读关键词
前端·信息可视化·echarts
woyaoshengzhang2 小时前
React 自定义 Hook
前端·javascript·react.js
爱棋笑谦3 小时前
SpringMVC的使用
java·开发语言·前端
ruleslol4 小时前
Vue70-路由的几个注意点
前端·vue.js
程序员微木5 小时前
【ajax基础03】常用ajax请求方法和数据提交以及axios错误处理
前端·javascript·ajax
水煮白菜王5 小时前
浏览器渲染原理
前端·chrome·http·edge浏览器
Chen不旧5 小时前
隐藏element的DateTimePicker组件自带的清空按钮
前端·javascript·vue.js·elm·el-date-picker·popper-class·datetimerange