react项目中使用svg-sprite-loader按需加载svg

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]',
  },
},

你可能感兴趣的:(react.jswebpack)