代码改变世界

React 代码 Import Svg as ReactComponent 失败

  muamaker  阅读(2794)  评论(0编辑  收藏  举报

在 react 里面使用 svg

一、在 create-react-app 创建的项目中

  方式 1、

  

1
2
3
4
import logo from './logo.svg';
 
 
<img src={logo}  />

缺点在于不能在修改颜色,这里其实就是直接用 img 加载了 svg 文件

 

     方式 2、

1
2
3
4
import {ReactComponent  as ComLogo} from './logo.svg';
 
 
<ComLogo  />

这里可以看见,实际上就是渲染了一个 SVG ,自定义的程度会很高。不过有版本需要:

react-scripts  版本要大于 @2.0.0

react  版本大于 @16.3.0

具体可以参考官方文档

 

二、自己从零开始配置的 webpack 项目

 

如果使用上面的第二种方式引入,发现竟然是 undefined , 进过研究发现需要一些配置。

注意 1、 typescript 项目 需要在项目根目录  加一个 custom.d.ts 文件声明。

  写入:

1
2
3
4
5
6
declare module '*.svg' {
    import React = require('react');
    export const ReactComponent: React.FunctionComponent<React.SVGProps<SVGSVGElement>>;
    const src: string;
    export default src;
  }

  

然后在 tsconfig.json 中加入:

 

 

  

 注意 2 、通过对 create-react-app 进行 eject , 查看配置发现,还需要给 webpack 加入配置:

  

 

  

1
2
3
4
5
6
7
8
9
10
[
                  require.resolve('babel-plugin-named-asset-import'),
                  {
                    loaderMap: {
                      svg: {
                        ReactComponent: '@svgr/webpack?-svgo,+ref![path]',
                      },
                    },
                  },
                ],

  

 

最后安装:

1
2
3
yarn add babel-plugin-named-asset-import
 
yarn add @svgr/webpack

  

 

三、如果 在  create-react-app 使用了  @craco/craco  进行修改 webpack 配置。

  那么一样需要安装 

1
@svgr/webpack<br><br>然后配置如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
module.exports = {
      plugins: [
        
      ],
      // ... 其他配置
      webpack: {
        configure: (config, { env, paths }) => {
         
          // 需要在这里添加
          config.module.rules.push({
            test: /\.svg$/,
            use: ["@svgr/webpack"]
          });
          return config;
        }
      }
    };

  

1
<br><br><br>

 

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
历史上的今天:
2019-05-09 javascript 的惯性运动
点击右上角即可分享
微信分享提示