React 基本配置(五)配置svg图片

config-overrides.js 中配置

1.下载 customize-cra、react-app-rewired

npm install customize-cra react-app-rewired

2.通过 customize-cra引入 addWebpackModuleRule

在这里插入代码片
const { override,addWebpackModuleRule} = require("customize-cra");
module.exports={
  webpack:function(conifg,env)
  {
      override(
      // svg-sprite-loader
      addWebpackModuleRule({
        test: /\.svg$/,
        include: [resolve("src/assets")],
        use: [
          {
            loader: "svg-sprite-loader",
            options: { symbolId: "icon-[name]" },
          },
        ],
      })
    )(config,env)
    return config
  }
}

3.安装svg-sprite-loader

npm install svg-sprite-loader

4.创建icons组件

在src目录在创建components目录,在该目录下创建svgIcons目录,在该目录下创建svgConfig.js、
index.jsx、svg.module.css三个文件
注意:src 下的index.js入口文件中需要引入svgConfig.js文件
import "@/components/svgIcons/svgConfig.js";
svgConfig.js代码如下:
//把svg文件放在assets目录下的svg文件夹里
const req = require.context("@/assets/svg", false, /\.svg$/);
const requireAll = (requireContext) =>
requireContext.keys().map(requireContext);
requireAll(req);
index.jsx文件代码如下:
import React, { Component } from "react";
import PropTypes from "prop-types";
import "./index.module.css";
export default class index extends Component {
static propTypes = {
 iconClass: PropTypes.string.isRequired,
 className: PropTypes.string,
};
render() {
 const { iconClass, className } = this.props;
 const styleExternalIcon = {
   mask: `url(${iconClass}) no-repeat 50% 50%`,
   WebkitMask: `url(${iconClass}) no-repeat 50% 50%`,
 };
 const isExternal = (path) => /^(https?:|mailto:|tel:)/.test(path);
 const svgClass = className ? "svg-icon " + className : "svg-icon";
 const iconName = `#icon-${iconClass}`;
 return (
   <>
     {isExternal(iconClass) ? (
       <div
         style={styleExternalIcon}
         className={`svg-external-icon ${svgClass}`}
       />
     ) : (
       <svg className={svgClass} aria-hidden="true">
         <use xlinkHref={iconName} />
       </svg>
     )}
   </>
 );
}
}
index.module.css文件代码如下:
.svg-icon {
 width: 1em;
 height: 1em;
 vertical-align: -0.15em;
 fill: currentColor;
 overflow: hidden;
}

.svg-external-icon {
 background-color: currentColor;
 mask-size: cover !important;
 display: inline-block;
}
组件的使用如下:
<SvgIcon iconClass="homePage-cpdw" className="svgPic" />``
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值