SVG 很酷,它们能放大放小。

那么 SVG 的优点是什么?

SVG 或可缩放矢量图形是基于 XML 的格式图像格式,可以在保持图像质量的同时缩放到任何大小。因此,当你需要根据需要调整大小的图像时,SVG 是可行的方法。它们基本上是 XML 文档,因此与其他图像格式相比,它们的文件大小也很小。

它们也是有效的 XML 元素,可以使用 CSS 进行操作。所以在 SVG 上改变颜色和笔画都可以通过 CSS 完成。

听起来不错。不好的地方呢?

在图像方面,SVG 非常适合简单的形状,充满基本的笔触和颜色。虽然比图标更复杂但它们不值得麻烦。(除非你正在进行数据可视化,否则请使用 D3.js)

自己构建 SVG 也更复杂。由于它们是以 XML 格式构建的,因此构建一个可能比存储像素数据的等效光栅图像更难。

怎样在 React 中引入?

在 web 文档中使用 SVG 时,你有两种选择。按原样呈现 SVG 文档,或将其用作 img 标签中的 src 属性。优选的选项是按原样使用它,因为图像标记中的 SVG 呈现为图像,并且不能在 img 标签的 css 样式之外进行操作。

因此,在决定在 React 项目中使用 SVG 时,最好构建一个组件,而不是将 SVG 渲染到文档中。

const SVG = () =>

width="100%"

height="100%"

viewBox="0 0 32 32"

xmlns="http://www.w3.org/2000/svg"

xmlnsXlink="http://www.w3.org/1999/xlink"

>

这会将静态 SVG 呈现到 html 文档中。让我们添加一些道具。

const SVG = ({

style = {},

fill = '#fff',

width = '100%',

className = '',

height = '100%',

viewBox = '0 0 32 32',

}) =>

width={width}

style={style}

height={height}

viewBox={viewBox}

className={className}

xmlns="http://www.w3.org/2000/svg"

xmlnsXlink="htpp://www.w3.org/1999/xlink"

>

我们现在可以使用此组件来呈现不同颜色,类名和样式的 SVG。

当我们有多个图标来处理时怎么办?

好的,我们现在大致了解如何为 SVG 图标创建 React 组件。那么我们如何处理大量的图标,这在大型项目中很常见?在这里,我们有多种选择。我们可以有一个巨大的组件,它返回所需的 SVG 图标或创建一个映射器组件,它接收一个 prop 并将其映射到等效的 SVG 组件。

让我们来看看它们是如何实现的。

途径 #1

TL:DR:我们创建一个 SVG 组件并将名称 prop 传递给它。该组件解析与该图标关联的 viewBox 和路径值,并返回 SVG 元素。

让我们首先将名称 prop 添加到我们的 SVG 组件并解析该名称 prop 的路径。

const getPath = (name, props) => {

switch(name) {

case 'icon-1':

return ;

case 'icon-2':

return ;

default:

return

}

}

const SVG = ({

name = '',

style = {},

fill = '#000',

width= '100%',

className = '',

height = '100%',

viewBox = '0 0 32 32',

}) =>

width={width}

style={style}

height={height}

viewBox={viewBox}

className={className}

xmlns="http://www.w3.org/2000/svg"

xmlnsXlink="http://www.w3.org/1999/xlink"

>

{getPath(name, { fill })}

;

效果很好。但我们没有考虑过每个 SVG 图标都有自己的 viewBox 值。所以我们还需要根据名称 prop 解析 viewBox。

const getViewBox = name => {

switch(name) {

case 'icon-1':

return 'icon-1-view-box'; // Eg. 0 0 32 32

default:

return '';

}

}

width={width}

style={style}

height={height}

className={className}

viewBox={getViewBox(name)}

xmlns="http://www.w3.org/2000/svg"

xmlnsXlink="http://www.w3.org/1999/xlink"

>

{getPath(name, { fill })}

;

就是这样。我们可以向此组件添加更多路径和视图框,并通过为我们需要的图标添加名称 prop 来使用它。

途径 #2

TR;DR:我们为每个 SVG 图标创建单独的文件,并创建一个索引文件,该文件根据名称 prop 返回 SVG 组件。

我们为每个我们想要的 SVG 图标创建单独的组件。

./icons

--/Phone.js

--/Trash.js

--/Messages.js

--/Envelope.js

--/Wifi.js

每个组件彼此独立,可以单独使用。

import Phone from './icons/Phone'

然后,我们创建一个索引文件,该文件根据名称 prop 返回组件本身。

./icons

--/Phone.js

--/Trash.js

--/Message.js

--/Envelope.js

--/Wifi.js

--/...

--/index.js

索引文件看起来像这样。

import React from 'react';

import Phone from './Phone';

import Messages from './Messages';

const Icon = props => {

swtich(props.name) {

case "phone":

return ;

case "messages":

return ;

default:

return

}

}

export default Icon;

因此,只要我们需要在混合中添加新图标,我们就会创建新组件并将它们包含在索引文件中。我们通过导入单个 Icon 组件并将名称 prop 发送到其中来使用此组件。

import Icon from './icons';

就是这样。我详细介绍来一些创建 React 组件来操作 SVG 图像的方法。当然,这些并不是 React 应用程序中处理 SVG 的唯一方法,也不是最好的方法。就像 Javascript 世界中的任何东西一样,我们总能提供其他选择。

替代选项

Webpack SVG Loader —— 用于将 SVG 文件作为组件导入的 webpack 加载程序

React Inline SVG —— 一个 React 组件,它将 SVG 文件路径作为 prop 在文档上呈现它们。

本作品采用《CC 协议》,转载必须注明作者和本文链接

react前端显示图片_在 React 中使用 SVG 图标组件相关推荐

  1. react前端显示图片_在react中怎么动态渲染图片?

    在react中怎么动态渲染图片?下面本篇文章给大家介绍一下.有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助. React 动态渲染图片,提升用户体验 市场上竞争是非常残酷的,众所周知, ...

  2. react前端显示图片_在react里怎么引用图片

    在react里怎么引用图片 方法一:import引入 import引入图片相比引用public文件夹里的图片会经过webpack的处理,如果导入小于10,000字节的图像将返回数据URI而不是路径,这 ...

  3. react前端显示图片_如何在react项目中引用图片?

    如何在react项目中引用图片?本文码云笔记将为大家整理在react项目中插入图片以及背景图片的方法,希望对需要的小伙伴提供一些参考. 在react项目中插入图片以及背景图片的方法共有2种: 1.im ...

  4. python的flask前端显示图片_python 实现Flask中返回图片流给前端展示

    场景需求:需要在Flask服务器的本地找一张图片返回给前端展示出来. 问题疑点:通常前端的标签只会接受url的形式来展示图片,没试过在返回服务器本地的一张图片给前端. 因此写个记录一下这个看起来有点奇 ...

  5. js svg 转成文件_【非标题党】SVG 图标看我就够了

    都 2020 了如果你还没有在项目中使用过 SVG,就好比你没有在项目使用过 REACT 或 VUE 一样. 在不考虑兼容性(IE8+)的情况下,SVG 应该是目前解决项目中图标问题的最佳方案,没有之 ...

  6. PowerBI中使用SVG图标简单介绍

    PowerBI中使用SVG图标简单介绍 1. 什么是SVG? SVG 意为可缩放矢量图形(Scalable Vector Graphics). SVG 是使用 XML 来描述二维图形和绘图程序的语言. ...

  7. Vue中使用SVG图标的步骤【钢镚核恒】

    Vue中使用SVG图标的步骤 简介 svg 可缩放矢量图形(Scalable Vector Graphics) svg 优势:任意缩放,超强显示效果,较小文件,可压缩 svgo 用来压缩svg中无用信 ...

  8. mpvue微信小程序中使用svg图标,并通过代码动态改变图标颜色

    微信小程序,mpvue中使用svg图标,并通过代码改变图标颜色 本文主要是mpvue开发小程序的代码,不过微信小程序原生开发应该也是一样的,思路都是通用的,按照这个思路微信小程序原生开发一样可以实现同 ...

  9. 使用 iconfont 中的 svg 图标

    最近在使用 Element-UI开发的时候发现其图标并不是够用,于是想着如何将 https://www.iconfont.cn/home/index 上面的图标导入进自己的项目中去. 网上的搜索结果基 ...

最新文章

  1. 为VSFTP用户指定登录后的目录.原创测试通过.
  2. IOS开发笔记12-Object-C中的对象与内存
  3. Ubuntu | 使用 SecureCRT 远程登录 Ubuntu
  4. hibernate的懒加载(延迟加载)问题
  5. oracle中使用子查询为何取到大于自然数1 rownum 浅度解析
  6. 重装linux之后gcc等下载不了,Redhat linux下安装gcc
  7. C++ Primer 第五版 第6章 6.3——函数返回类型和return语句习题答案
  8. Leetcode每日一题:204.count-primes(计数质数)
  9. I/O error on GET request for http://userservice/user/point/update: userservice; nested exception
  10. 【Love2d从青铜到王者】第七篇:Love2d之对象
  11. 重学JavaWeb —— Servlet,简单全面一发入魂
  12. shell:sed 替换换行符
  13. 银河linux看版本,下载Linux客户端 - 银河云盘 - 银河证券
  14. VMware下安装win10启动后进入Boot Manger界面如何解决
  15. 《MLB棒球创造营》:棒球团建·一球成名
  16. 解决Nginx出现 403 Forbidden的办法
  17. HTML静态网页设计基础
  18. Chapter 1. OpenGL基础回顾 - Review of OpenGL Basics
  19. Meth | 关闭mac自带apache的启动
  20. mysql 将米换算公里_千米和公里怎么换算

热门文章

  1. 读取图像矩阵维度必须一致_深度学习在放射治疗中的应用——工具篇(二)矩阵基本操作...
  2. java flex xml文件_Flex xml套接字到Java xml套接字
  3. c# 找出目录下的所有子目录_Linux技巧:ls命令只列出子目录名和每行打印一个文件名
  4. ios蓝牙开发(三)app作为外设被连接的实现
  5. ExtJs radiogroup form.loadRecord方法无法赋值正确解决办法
  6. SSL 1108——【USACO 2.1】海明码(DFS)
  7. vue + vue-router + vue-resource 基于vue-cli脚手架 ---笔记
  8. 用fiddler解决跨域访问
  9. [转]Java5泛型的用法,T.class的获取和为擦拭法站台
  10. 终于把结婚照片做成了MTV