先放代码,然后再解释。
// 文件目录 src/ --assets/ --svgs/ --test.svg --components/ --SvgIcon/ --icons.js --index.js --style.css --index.js
// index.js // 引入 svg 图标 import './components/SvgIcon/icons'
// components/SvgIcon/icons.js // 引入所有的svg的文件 const requireAll = requireContext => requireContext.keys().map(requireContext); const req = require.context('../../assets/svgs/', false, /\.svg$/); requireAll(req)
// components/SvgIcon/index.js import React, { Component } from 'react'; import './style.css'; class SvgIcon extends Component { render() { const iconName = `#icon-${this.props.iconClass}`; return ( <svg className="svg-icon" aria-hidden="true"> <use xlinkHref={ iconName }></use> </svg> ) } } export default SvgIcon;
// components/SvgIcon/style.css :global .svg-icon { width: 1em; height: 1em; vertical-align: -0.15em; fill: currentColor; overflow: hidden; }
// webpack.config.js var webpack = require('webpack'); var path = require('path') function resolve(dir) { return path.join(__dirname, '.', dir) } module.exports = function (webpackConfig, env) { // 要从默认配置的 rules[1] 中将相关目录排除掉 webpackConfig.module.rules[1].exclude.push(resolve('src/assets/svgs')) webpackConfig.module.rules.push({ test: /\.svg$/, include: resolve('src/assets/svgs'), use: [ { loader: 'svg-sprite-loader', options: { symbolId: 'icon-[name]', } } ] }) }
以上是 dva 的配置。先不解释了,都懂的。