React 项目引入 svg 图片为 undefined 情况

金歌  论坛元老 | 2024-12-17 14:17:18 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 1058|帖子 1058|积分 3174

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
如下面这段代码,发现加载 tools 的时候, Icon 对应的 RotateRight 为 unfined, 但是svg图片的路径是精确的。
  1. import { ReactComponent as RotateRight } from 'assets/images/xxx/icon_img_rotate+90_default.svg';
  2. const tools = [
  3.     {
  4.       Icon: RotateRight,
  5.       onClick: onRotateRight,
  6.       type: 'rotateRight',
  7.     }
  8. ]
复制代码
缘故原由:
Webpack 配置或缺少插件,我使用的是自定义 Webpack 配置,发现没有配置 @svgr/webpack 插件。
解决:
我使用的 版本是 “webpack”: “^4.41.5”,“react”: “^17.0.2”,下载兼容的@svgr/webpack插件版本。
  1. yarn add @svgr/webpack@5 --dev
复制代码
在 Webpack 配置中,配置 @svgr/webpack
  1. const path = require('path');
  2. const loaderUtils = require('loader-utils');
  3. module.exports = {
  4.   // 其他配置...
  5.   module: {
  6.     rules: [
  7.       // 处理SVG图标为React组件的规则
  8.       {
  9.         test: /\.svg$/,
  10.         issuer: /\.[jt]sx?$/, // 确保只对JSX/TSX文件中的SVG应用此规则
  11.         use: [
  12.           {
  13.             loader: '@svgr/webpack',
  14.             options: {
  15.               svgoConfig: {
  16.                 plugins: [{ removeViewBox: false }],
  17.               },
  18.               // 你可以在这里添加更多 @svgr/webpack 的选项
  19.             },
  20.           },
  21.         ],
  22.       },
  23.       // 如果你还想保持原来的SVG文件加载方式(例如,通过import引入作为URL)
  24.       // 你可以添加另一个规则来处理这些情况:
  25.       {
  26.         test: /\.svg$/,
  27.         exclude: /node_modules/,
  28.         use: ['url-loader'], // 或者 file-loader, 根据你的需求选择
  29.       },
  30.     ],
  31.   },
  32.   // 其他配置...
  33. };
复制代码
假如使用的是 Babel 编译 JavaScript 文件,在 .babelrc 文件中配置下面代码
  1. {
  2.   "presets": ["@babel/preset-env", "@babel/preset-react"]
  3. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

金歌

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表