【React】使用svg-sprite-loader+svgo-loader完成svg组件封装

1.安装svg-sprite-loader

 npm i svg-sprite-loader

2. 暴露webpack.config.js文件

安装完的svg-sprite-loader需要配置到webpack.config.js中才可以使用,初始的react项目的配置文件是封装好的,运行npm run eject可以将这些文件暴露出来,但注意这个操作不可逆。

npm run eject // 不可逆

3. 配置webpack.config.js文件

  {
     test: /\.svg$/,
     use: [
        { loader: 'svg-sprite-loader', options: {} }
      ]
  },

将这段代码加入到 webpack.config.js 的 module.rules 的 oneOf 中,注意原有的svg配置保留,不然会导致require进来的svg文件找不到路径
在这里插入图片描述

4. 创建自定义Icon组件

1)新建文件

组件目录结构
在src目录下新建icons文件(文件具体位置不影响使用,只要引用地址正确就可以)

2)icon.js文件

import React from 'react';
import './icon.css'

const requireAll = (requireContext) => {
    return requireContext.keys().map(requireContext)
}
// require.context(要搜索的文件夹目录, 是否还应该搜索它的子目录, 匹配文件的正则表达式)
const req = require.context('./svg', true, /.svg$/)
requireAll(req)

const Icon = (props) => {
    return (
        <svg className="icon">
            <use xlinkHref={'#' + props.name}/>
        </svg>
    );
};
export default Icon;

3)icon.css文件

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

5. 使用组件

import Icon from "../icons/icon";
function Example(){
    return(
        <div>
        	<Icon name="message"/>
        </div>
    )
}

6. 使用svgo-loader

到上一步,svg图标已经可以在页面显示了,但是要实现自定义颜色需要把svg文件中原有的fill属性去掉。当然手动更改svg文件也是可以的,但是安装svgo-loader自动删除会更加便捷

1)安装svgo-loader

npm i svgo-loader

2)配置webpack.config.js文件

在原来添加svg-sprite-loader的底下添加后,重启项目完成配置

  {
     test: /\.svg$/,
     use: [
        { loader: 'svg-sprite-loader', options: {} },
        { loader: 'svgo-loader', options: {
                    plugins:[
                      {
                        name: 'removeAttrs',
                        params: {
                          attrs: 'fill'
                        }
                      }//删除fill属性
                    ]
                  }
                }
      ]
  },
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值