svg组件
import React, { useRef, useMemo, useState, useEffect } from 'react'
import '@/styles/components/svg/index.scoped.scss'
type IImport = {
default?: Record
[key: string]: any
}
type ISvg = {
iconClass: string
className?: string
width?: number
height?: number
color?: string
style?: Record
onClick?: () => void
}
const SvgIcon: React.FC = (props: any) => {
const {
iconClass,
className,
width = 16,
height = 16,
color = '#000',
style = {},
onClick,
} = props
const [svgModule, setSvgModule] = useState()
const getSvg = async () => {
const svg = await import(`../../icons/svg/${props.iconClass}.svg`)
setSvgModule(svg)
}
const iconPath = useMemo(() => {
if (svgModule && svgModule.default) {
return `#${svgModule.default.id}`
}
}, [iconClass, svgModule])
const Style = {
...style,
width: `${width}px`,
height: `${height}px`,
color,
}
useEffect(() => {
getSvg()
}, [])
return (
)
}
export default SvgIcon
webpack配置--loader
{
test: /\.(svg)$/,
loader: 'svg-sprite-loader',
exclude: [/node_modules/],
include: [resolve('../app/icons/svg')],
options: {
// extract: true,
symbolId: 'icon-[name]',
},
},