简介
场景应用
使用svg
react
项目使用SVG
图标,参考:React项目中使用svg图标
主要区别在于webpack
配置。
Ant Design Pro
项目的webpack
配置如下
- 修改
config/config.js
文件,添加如下代码
// ...
import path from 'path'
// ...
export default defineConfig({
// ...
chainWebpack(memo, { env, webpack, createCSSRule }) {
const iconPath = path.resolve(__dirname, '../', 'src/icons/svg')
// 先找到原来的svg配置,设置exclude
const svgRule = memo.module.rules.get('svg')
svgRule.exclude.add(iconPath)
// 新的配置
memo.module.rule('icon-svg')
.test(/\.svg$/)
.include
.add(iconPath)
.end()
.use('svg-sprite')
.loader('svg-sprite-loader')
.options({
symbolId: 'icon-[name]'
})
}
})
左侧菜单中的Icon
是通过配置修改的。要想使用我们自己的svg
图标,需要修改下配置,具体如下:
- 修改
src/app.jsx
文件
// ...
import SvgIcon from '@/components/SvgIcon'
// ...
export const layout = ({ initialState }) => {
return {
// ...
menuDataRender: menuDataRender,
};
};
function menuDataRender(menuList) {
return menuList.map((item) => {
return {
...item,
// 这里的 anticon 是为了复用原来的样式
icon: item.iconSvg ? <SvgIcon icon={item.iconSvg} className="anticon margin_right_10" /> : item.icon,
children: item.children ? menuDataRender(item.children) : undefined,
};
});
}
- 修改
config/routes.js
文件
export default [
{
path: '/welcome',
name: '首页',
// icon: 'home', // 原来的方式,仍然可以使用
iconSvg: 'home', // 新的方式,home为 src/icons/svg 里面的某个svg图标文件名
component: './Welcome',
},
发表评论