• React 代码 Import Svg as ReactComponent 失败


    在 react 里面使用 svg

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

      方式 1、

      

    import logo from './logo.svg';
    
    
    <img src={logo}  />

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

         方式 2、

    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 文件声明。

      写入:

    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 加入配置:

      

      

    [
                      require.resolve('babel-plugin-named-asset-import'),
                      {
                        loaderMap: {
                          svg: {
                            ReactComponent: '@svgr/webpack?-svgo,+ref![path]',
                          },
                        },
                      },
                    ],
    

      

    最后安装:

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

      

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

      那么一样需要安装 

    @svgr/webpack

    然后配置如下:
    module.exports = {
    	  plugins: [
    	   
    	  ],
    	  // ... 其他配置
    	  webpack: {
    	    configure: (config, { env, paths }) => {
    		
    		  // 需要在这里添加
    	      config.module.rules.push({
    	        test: /.svg$/,
    	        use: ["@svgr/webpack"]
    	      });
    	      return config;
    	    }
    	  }
    	};
    

      




  • 相关阅读:
    云计算openstack核心组件——neutron网络服务(9)
    云计算openstack核心组件——neutron网络服务(8)
    flexible.js 布局详解
    libflexible源码阅读
    H5适配方案
    微信分享朋友圈示例代码
    微信接口示例代码
    微信JSSDK上传图片,代码为上传单张图
    H5动画开发快车道
    Centos 6.5 安装 Nginx+MySQL+PHP
  • 原文地址:https://www.cnblogs.com/muamaker/p/14748423.html
Copyright © 2020-2023  润新知