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

导入SVG图标仅显示路径字符串而非实际图标问题

解决SVG导入仅返回路径而非实际图标的问题

问题原因

默认情况下,React项目(比如Create React App)会将SVG文件当作静态资源处理,直接导入时只会返回资源的字符串路径,而非可渲染的SVG组件。

解决方案

方法1:使用CRA内置的SVG组件导入方式

修改你icons/index.js里的导入语句,添加ReactComponent别名:

// icons/index.js
import { ReactComponent as ArrowDown12 } from './12x12/arrow-down-12.svg';
import { ReactComponent as ArrowUp12 } from './12x12/arrow-up-12.svg';
// 其他图标同理

export {
  ArrowDown12,
  ArrowUp12
  // 导出其他图标组件
};

在其他组件中导入后,直接当作React组件使用:

import { ArrowDown12 } from '../assets/icons';

// 组件内渲染
<ArrowDown12 />

方法2:通过require导入SVG组件

如果习惯用require,需要获取导出的ReactComponent:

// icons/index.js
export const ArrowDown12 = require('./12x12/arrow-down-12.svg').ReactComponent;
export const ArrowUp12 = require('./12x12/arrow-up-12.svg').ReactComponent;

组件内使用方式和方法1一致。

方法3:自定义Webpack配置(需Eject或使用craco等工具)

如果项目已经Eject,或者用了craco、react-app-rewired,可以修改Webpack配置,让所有SVG默认解析为组件:

// webpack.config.js 或 craco.config.js
module.exports = {
  module: {
    rules: [
      {
        test: /\.svg$/i,
        issuer: /\.[jt]sx?$/, // 仅对js/ts/jsx/tsx文件生效
        use: ['@svgr/webpack'],
      },
    ],
  },
};

配置后,你原来的普通导入方式就会返回SVG组件,无需额外添加ReactComponent。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 01:50:38