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

Posted 万年打野易大师

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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<string, any>
  [key: string]: any
}

type ISvg = {
  iconClass: string
  className?: string
  width?: number
  height?: number
  color?: string
  style?: Record<string, any>
  onClick?: () => void
}

const SvgIcon: React.FC<ISvg> = (props: any) => {
  const {
    iconClass,
    className,
    width = 16,
    height = 16,
    color = \'#000\',
    style = {},
    onClick,
  } = props
  const [svgModule, setSvgModule] = useState<IImport>()

  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 (
    <svg
      onClick={onClick}
      style={Style}
      className={`svg-icon ${className}`}
      aria-hidden="true"
    >
      <use xlinkHref={iconPath} />
    </svg>
  )
}

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项目中使用svg-sprite-loader按需加载svg的主要内容,如果未能解决你的问题,请参考以下文章

Vite中使用 svg-sprite-loader

vue-巧用svg-sprite-loader,提高效率利器;

vue2&3自定义svg图标组件

Vue项目中使用svg图标

Vue项目中svg图标不能正常显示

svg在vue-cli3中的配置