You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决React引用SVG时出现export 'ReactComponent' was not found报错

报错原因

你使用的import { ReactComponent as XXX } from '*.svg'语法依赖@svgr/webpack loader对svg文件做编译转换,将其转为可直接调用的React组件。你的当前webpack配置未添加该loader,所以svg文件仅能导出默认的资源路径,对应报错提示的possible exports: default。

解决方案

方案一:配置@svgr/webpack支持组件式导入(推荐)

  • 第一步:安装依赖
    执行命令:
    npm install @svgr/webpack --save-dev
    如果使用yarn,执行:
    yarn add @svgr/webpack --dev
  • 第二步:修改webpack配置
    找到项目根目录下的webpack.config.js文件,在module.rules数组中新增svg处理规则:
module.exports = {
  // 此处保留你原有webpack配置的其他内容
  module: {
    rules: [
      // 此处保留你原有其他loader规则(处理jsx、css等的规则)
      // 新增以下svg处理规则
      {
        test: /\.svg$/i,
        // 仅对js/tsx文件导入的svg做组件转换
        issuer: /\.[jt]sx?$/,
        use: ['@svgr/webpack'],
      },
    ]
  }
}

如果你需要同时支持两种导入方式:默认导入为资源路径、命名导入为React组件,可将规则调整为:

{
  test: /\.svg$/i,
  issuer: /\.[jt]sx?$/,
  use: [
    {
      loader: '@svgr/webpack',
      options: { exportType: 'named' }
    },
    {
      loader: 'url-loader',
      options: { esModule: false }
    }
  ]
}

注意:如果原有配置中已经存在处理svg的规则(比如用file-loader/url-loader处理),需要将原有规则删除,或者调整匹配逻辑避免冲突。

  • 第三步:重新执行构建
    修改配置后重新运行npm run webpack即可,原有代码的导入语法无需调整。

方案二:无需改配置的临时替代方案

如果你暂时不想调整webpack配置,可以将svg作为普通静态资源导入,用img标签渲染:

// 修改导入语法,去掉解构的ReactComponent
import LightBulb from "../../../assets/icons/lightbulb-on.svg";
import Cross from "../../../assets/icons/times-circle.svg";

// 渲染时替换为img标签
const InformationBox = ({ children, setState }) => {
      return (
        <div className={styles.informationBox}>
          <button
            className={styles.closeMessageBox}
            onClick={() => setState((state) => ({ ...state, infoBox: "" }))}
          >
            <img src={Cross} className={styles.closeMessageBoxIcon} alt="关闭" />
          </button>
          <img src={LightBulb} className={styles.informationBoxLogo} alt="提示" />
          <div className={styles.informationBoxContent}>{children}</div>
        </div>
      );
    };

该方案的缺点是无法通过className直接修改svg的fill、stroke等内部样式,仅适合不需要动态调整svg样式的场景。

内容的提问来源于stack exchange,提问作者himanish00

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 08:24:11