前言

之前一直用 image 的方式使用 svg,后来,改把 svg 上传到阿里巴巴的 iconfont-阿里巴巴矢量图标库 使用。

前段时间,iconfont 出问题了,不支持上传 svg,也不支持生成 cdn 了,只能下载到本地使用。

后来,尝试使用了一下本地使用的方式,还是太麻烦,最主要,已经没法上传自己的 svg 了,还不利于团队协作,太不友好了。

于是研究了一下,才发现,原来早就有更好的实现方式了,可以完全不依赖 iconfont 生成的资源来运作。

阅读文档

说实话,有些细节,如果不是自己慢慢摸索,很难在一开始就发现。

其实解决问题的方案,老早就跃然纸上,只是之前已经错过了很多次了。

使用一项新技术、新框架的时候,我想,很多人都没有耐心从头到尾,详细的看一遍官方文档。

我稍微总结了一下,原因大概有几点:

  1. 官方文档写得太晦涩难懂了,术语用的太专业,看起来太过于无聊,浪费时间
  2. 没有中文文档,对于英语阅读能力不好的童鞋,看起来太吃力
  3. 基础不行,看起来太过吃力,即使耐心的看完,也是云里雾里,完全不能理解
  4. 不知道合适的应用场景,看了也不清楚该怎么用,前面看后面就忘记了,不如当作工具书来用
  5. 官方文档写的太差,不值得一看,不如直接阅读源码

我想,笔者总结的这几点,大部分人在某些情况下,应该都能对号入座。

不看官方文档,也不能说一定不好,但是,相信我,大部分官方文档看了总比不看要好。

试想想,还能有谁比技术、框架的作者更了解产品本身呢?

The devil is in the details

按照个人的经验来说,也许很多困扰你已久的问题,可能就藏在官方文档的某个不起眼的角落里面,等待着你去发掘呢。

历程

我一直认为,写技术文章,如果只专注于写技术本身,其实并没有多大的参考价值。那就如同一本流水账一样,和藏在官方文档的某个角落里,和藏在叫教科书的某个章节里没啥区别。

如果是那样,与其叫文章,倒不如叫摘抄。

比如在我决定花时间去研究下,如何替换 iconfont 之后,我就在找有什么合适的技术方案。

首先第一步,肯定是罗列一些不能直击核心本质的关键字,在搜索引擎检索一番。

依照以往的经验来看,这多半是找不到合适的答案的。在没有理解透彻问题的本质之前,很难一下子就抓住关键要素。

后来我一想,之前用上 iconfont 也是因为,在 antd 里的文档看到使用推荐,那有没有别的方式呢?

别说,还真有。

图标 Icon - Ant Design

从文档中可以看出,有一个 svgr 插件,是支持以 react component 的方式,引入 svg 图片的。

打开官网的开始使用页面: Getting started - SVGR

可以看到,有在 webpack 里使用的教程。

又是对着文档一番折腾,最后发现,仍旧是使用失败。

当然这里有一个前提是,我的项目之前是直接使用 create-react-app 创建的,你如果直接用 webpack 从零开始配置的项目,按照教程里用肯定是没问题的。

用过 create-react-app 的童鞋应该知道,官方提供的脚手架非常的好用,但是其内部的 webpack 相关配置隐藏的太好了,不方便更改。

为了项目的简介性,我不想将所有的配置 eject 出来,因为这个过程是不可逆的。

还好有个比较好的修改方案,就是使用 GitHub - gsoft-inc/craco: Create React App Configuration Override, an easy and comprehensible configuration layer for create-react-app 插件。

照着 svgr 官方文档的配置方式,再结合 craco 的修改默认 webpack 配置的方案,成功加载了插件,但是仍旧无法使用。

正所谓,“山重水复疑无路,柳暗花明又一村”。

正在我一筹莫展,苦恼不已的时候,却在 create-react-app 的官方文档有了新的发现:Adding Images, Fonts, and Files | Create React App

react-scripts@2.0.0react@16.3.0 版本开始,直接就支持以 ReactComponent 的方式导入 SVG 了。

看到这里,真是一口老血要气的喷出来了。

真可谓是,“众里寻他千百度,蓦然回首,那人却在灯火阑珊处”。

赶紧一顿还原操作,配合着 antd 的 Icon 组件,顺利的用上了 ReactComponent 形式的 SVG 了。

从此再也不用受制于 iconfont 了。

不过需要注意的是,如果你的 svg 里设置了颜色属性,如下面所示的话,那么最好给它删除掉以后再用,否则 svg 里图元的样式不能自动继承父元素的样式,处理起来较为麻烦。

总结

说来惭愧,如果不是因为 iconfont 出了这岔子问题,笔者也不会有兴趣研究这个问题,那么也就不会发现,原来在 react 中用 svg 还有这么舒服的使用方式。

通过研究这个问题,至少是给我自己敲响了一些警钟。有时候,发现问题,官网文档、官方论坛往往能帮助你解决大部分问题,耐心的研究过后,如果还是不能解决,在寻求别的方案,才是上策。

react 中更好的 svg 使用方式相关推荐

  1. React中组件通信的几种方式

    首次发表在个人博客 需要组件之进行通信的几种情况 父组件向子组件通信 子组件向父组件通信 跨级组件通信 没有嵌套关系组件之间的通信 1. 父组件向子组件通信 React数据流动是单向的,父组件向子组件 ...

  2. VueJS 中更好的组件组合方式

    原文地址:https://itnext.io/better-composition-in-vue-fd35b9fe9c79 原文作者:????Francesco Vitullo 译文出自:????掘金 ...

  3. React基础-React中发送Ajax请求以及Mock数据

    前言 在 React 中, render 函数返回的结果,取决于组件的 props 和 state 我们都知道 UI 页面上的数据不是写死的,往往是从后端的数据接口中拿到的 然后将真实的数据填充到页面 ...

  4. React学习(九)-React中发送Ajax请求以及Mock数据

    虽互不曾谋面,但希望能和你成为笔尖下的朋友 以读书,技术,生活为主,偶尔撒点鸡汤 不作,不敷衍,意在真诚吐露,用心分享 点击左上方,可关注本刊 撰文 | 川川 VX-ID:suibichuanji 点 ...

  5. [react] 在React中如何引入图片?哪种方式更好?

    [react] 在React中如何引入图片?哪种方式更好? 第一种导入: import Img from "./images/1.png" 第二种直接获取图片: <img s ...

  6. php arcode svg,在react中使用svg的各种方法总结(附代码)

    这篇文章给大家介绍的内容是关于在react中使用svg的各种方法总结(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 优势 SVG可被非常多的工具读取和修改(比如vscode ...

  7. 在react中使用svg的各种骚姿势

    开头先抛个可供参考的项目ts-react-webpack4, 或脚手架steamer-react-ts 优势 SVG可被非常多的工具读取和修改(比如vscode) 不失真, 放大缩小图像都很清晰 SV ...

  8. react前端显示图片_在 React 中使用 SVG 图标组件

    SVG 很酷,它们能放大放小. 那么 SVG 的优点是什么? SVG 或可缩放矢量图形是基于 XML 的格式图像格式,可以在保持图像质量的同时缩放到任何大小.因此,当你需要根据需要调整大小的图像时,S ...

  9. React中组件间通信的方式

    React中组件间通信的方式 React中组件间通信包括父子组件.兄弟组件.隔代组件.非嵌套组件之间通信. Props props适用于父子组件的通信,props以单向数据流的形式可以很好的完成父子组 ...

最新文章

  1. Flex学习笔记2010-08-16
  2. 浅入深出Vue:文章编辑
  3. MVC学习之简单的CRUD
  4. 003thinkphp 数据库查询及表关联
  5. 畅通工程(最小生成树模板)
  6. 计算机为什么要区别C盘,D盘,E盘等?
  7. 蓝桥杯 BASIC-20 基础练习 数的读法 问题
  8. 简单树匹配算法STM-实践篇
  9. ORACLE常用数值函数、转换函数、字符串函数【转】
  10. nyoj-----284坦克大战(带权值的图搜索)
  11. Mac 安装和配置 Maven
  12. mysql 多表查询 like_MYSQL多表联合查询的问题
  13. BZOJ3332:旧试题
  14. 新浪微博登陆页面html代码,新浪微博登陆页面 找到我的位置,选择编辑;
  15. Mybatis 特殊符号(大于,小于,不等于)及常用函数总结
  16. 基于NABCD评论作品,及改进建议
  17. js递归返回想要的值
  18. Centos 7--pdf2htmlEX安装和配置
  19. 《Python语言程序设计基础》嵩天著-第6章程序部分练习题答案
  20. 计算机专业英语 unit 5 fundamentals,计算机专业英语Unit 5

热门文章

  1. Spring整合JMS(三)——MessageConverter介绍
  2. 悲痛!华科大研究生跳楼自尽,留下 7 页遗书控诉遭遇:跟人说又有谁在意?...
  3. 孤身漂在北上广,心是否系着远方的爹娘?
  4. VUE、微信小程序for循环动态变量取值
  5. 常用监控与prometheus监控的简介
  6. 初三学生多会筹备计算机中考考试,初三一模考试是什么时候 初三一模如何复习...
  7. java如果将信息推送到公众号_Java 推送微信公众号消息
  8. 距离大决战777天——目前的进度
  9. mysql插入\更新前+判断条件
  10. 一年读50本书还是读10本书收获更大?