react 中更好的 svg 使用方式

前言

之前一直用 image 的方式使用 svg婴栽,后來(lái),改把 svg 上傳到阿里巴巴的 iconfont-阿里巴巴矢量圖標(biāo)庫(kù) 使用簸淀。

前段時(shí)間,iconfont 出問(wèn)題了幔烛,不支持上傳 svg啃擦,也不支持生成 cdn 了囊蓝,只能下載到本地使用饿悬。

后來(lái),嘗試使用了一下本地使用的方式聚霜,還是太麻煩狡恬,最主要,已經(jīng)沒法上傳自己的 svg 了蝎宇,還不利于團(tuán)隊(duì)協(xié)作弟劲,太不友好了。

于是研究了一下姥芥,才發(fā)現(xiàn)兔乞,原來(lái)早就有更好的實(shí)現(xiàn)方式了,可以完全不依賴 iconfont 生成的資源來(lái)運(yùn)作。

閱讀文檔

說(shuō)實(shí)話庸追,有些細(xì)節(jié)霍骄,如果不是自己慢慢摸索,很難在一開始就發(fā)現(xiàn)淡溯。

其實(shí)解決問(wèn)題的方案读整,老早就躍然紙上,只是之前已經(jīng)錯(cuò)過(guò)了很多次了咱娶。

使用一項(xiàng)新技術(shù)米间、新框架的時(shí)候,我想膘侮,很多人都沒有耐心從頭到尾屈糊,詳細(xì)的看一遍官方文檔。

我稍微總結(jié)了一下琼了,原因大概有幾點(diǎn):

  1. 官方文檔寫得太晦澀難懂了另玖,術(shù)語(yǔ)用的太專業(yè),看起來(lái)太過(guò)于無(wú)聊表伦,浪費(fèi)時(shí)間
  2. 沒有中文文檔谦去,對(duì)于英語(yǔ)閱讀能力不好的童鞋,看起來(lái)太吃力
  3. 基礎(chǔ)不行蹦哼,看起來(lái)太過(guò)吃力鳄哭,即使耐心的看完,也是云里霧里纲熏,完全不能理解
  4. 不知道合適的應(yīng)用場(chǎng)景妆丘,看了也不清楚該怎么用,前面看后面就忘記了局劲,不如當(dāng)作工具書來(lái)用
  5. 官方文檔寫的太差勺拣,不值得一看,不如直接閱讀源碼

我想鱼填,筆者總結(jié)的這幾點(diǎn)药有,大部分人在某些情況下,應(yīng)該都能對(duì)號(hào)入座苹丸。

不看官方文檔愤惰,也不能說(shuō)一定不好,但是赘理,相信我宦言,大部分官方文檔看了總比不看要好。

試想想商模,還能有誰(shuí)比技術(shù)奠旺、框架的作者更了解產(chǎn)品本身呢蜘澜?

The devil is in the details

按照個(gè)人的經(jīng)驗(yàn)來(lái)說(shuō),也許很多困擾你已久的問(wèn)題响疚,可能就藏在官方文檔的某個(gè)不起眼的角落里面兼都,等待著你去發(fā)掘呢。

歷程

我一直認(rèn)為稽寒,寫技術(shù)文章扮碧,如果只專注于寫技術(shù)本身,其實(shí)并沒有多大的參考價(jià)值杏糙。那就如同一本流水賬一樣慎王,和藏在官方文檔的某個(gè)角落里,和藏在叫教科書的某個(gè)章節(jié)里沒啥區(qū)別宏侍。

如果是那樣赖淤,與其叫文章,倒不如叫摘抄谅河。

比如在我決定花時(shí)間去研究下咱旱,如何替換 iconfont 之后,我就在找有什么合適的技術(shù)方案绷耍。

首先第一步吐限,肯定是羅列一些不能直擊核心本質(zhì)的關(guān)鍵字,在搜索引擎檢索一番褂始。

依照以往的經(jīng)驗(yàn)來(lái)看诸典,這多半是找不到合適的答案的。在沒有理解透徹問(wèn)題的本質(zhì)之前崎苗,很難一下子就抓住關(guān)鍵要素狐粱。

后來(lái)我一想,之前用上 iconfont 也是因?yàn)榈ㄊ?antd 里的文檔看到使用推薦肌蜻,那有沒有別的方式呢?

別說(shuō)必尼,還真有蒋搜。

圖標(biāo) Icon - Ant Design

202206232322400.png

從文檔中可以看出,有一個(gè) svgr 插件胰伍,是支持以 react component 的方式齿诞,引入 svg 圖片的。

打開官網(wǎng)的開始使用頁(yè)面: Getting started - SVGR

20220624144353.png

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

又是對(duì)著文檔一番折騰斑司,最后發(fā)現(xiàn)渗饮,仍舊是使用失敗但汞。

當(dāng)然這里有一個(gè)前提是,我的項(xiàng)目之前是直接使用 create-react-app 創(chuàng)建的互站,你如果直接用 webpack 從零開始配置的項(xiàng)目私蕾,按照教程里用肯定是沒問(wèn)題的。

用過(guò) create-react-app 的童鞋應(yīng)該知道胡桃,官方提供的腳手架非常的好用踩叭,但是其內(nèi)部的 webpack 相關(guān)配置隱藏的太好了,不方便更改翠胰。

為了項(xiàng)目的簡(jiǎn)介性容贝,我不想將所有的配置 eject 出來(lái),因?yàn)檫@個(gè)過(guò)程是不可逆的之景。

還好有個(gè)比較好的修改方案斤富,就是使用 GitHub - gsoft-inc/craco: Create React App Configuration Override, an easy and comprehensible configuration layer for create-react-app 插件。

照著 svgr 官方文檔的配置方式锻狗,再結(jié)合 craco 的修改默認(rèn) webpack 配置的方案满力,成功加載了插件,但是仍舊無(wú)法使用轻纪。

正所謂油额,“山重水復(fù)疑無(wú)路,柳暗花明又一村”刻帚。

正在我一籌莫展悔耘,苦惱不已的時(shí)候,卻在 create-react-app 的官方文檔有了新的發(fā)現(xiàn):Adding Images, Fonts, and Files | Create React App

20220624150203.png

react-scripts@2.0.0react@16.3.0 版本開始我擂,直接就支持以 ReactComponent 的方式導(dǎo)入 SVG 了衬以。

看到這里,真是一口老血要?dú)獾膰姵鰜?lái)了校摩。

真可謂是看峻,“眾里尋他千百度,驀然回首衙吩,那人卻在燈火闌珊處”互妓。

趕緊一頓還原操作,配合著 antd 的 Icon 組件坤塞,順利的用上了 ReactComponent 形式的 SVG 了冯勉。

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

不過(guò)需要注意的是摹芙,如果你的 svg 里設(shè)置了顏色屬性灼狰,如下面所示的話,那么最好給它刪除掉以后再用浮禾,否則 svg 里圖元的樣式不能自動(dòng)繼承父元素的樣式交胚,處理起來(lái)較為麻煩份汗。

20220624151235.png

總結(jié)

說(shuō)來(lái)慚愧,如果不是因?yàn)?iconfont 出了這岔子問(wèn)題蝴簇,筆者也不會(huì)有興趣研究這個(gè)問(wèn)題杯活,那么也就不會(huì)發(fā)現(xiàn),原來(lái)在 react 中用 svg 還有這么舒服的使用方式熬词。

通過(guò)研究這個(gè)問(wèn)題旁钧,至少是給我自己敲響了一些警鐘。有時(shí)候互拾,發(fā)現(xiàn)問(wèn)題歪今,官網(wǎng)文檔、官方論壇往往能幫助你解決大部分問(wèn)題摩幔,耐心的研究過(guò)后彤委,如果還是不能解決,在尋求別的方案或衡,才是上策焦影。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市封断,隨后出現(xiàn)的幾起案子斯辰,更是在濱河造成了極大的恐慌,老刑警劉巖坡疼,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件彬呻,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡柄瑰,警方通過(guò)查閱死者的電腦和手機(jī)闸氮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)教沾,“玉大人镀钓,你說(shuō)我怎么就攤上這事进倍。” “怎么了推沸?”我有些...
    開封第一講書人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵棍掐,是天一觀的道長(zhǎng)票唆。 經(jīng)常有香客問(wèn)我缕探,道長(zhǎng)缅疟,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任淮菠,我火速辦了婚禮男公,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘兜材。我一直安慰自己理澎,他們只是感情好逞力,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開白布曙寡。 她就那樣靜靜地躺著糠爬,像睡著了一般。 火紅的嫁衣襯著肌膚如雪举庶。 梳的紋絲不亂的頭發(fā)上执隧,一...
    開封第一講書人閱讀 51,631評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音户侥,去河邊找鬼镀琉。 笑死,一個(gè)胖子當(dāng)著我的面吹牛蕊唐,可吹牛的內(nèi)容都是我干的屋摔。 我是一名探鬼主播,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼替梨,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼钓试!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起副瀑,我...
    開封第一講書人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤弓熏,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后糠睡,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體挽鞠,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年狈孔,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了信认。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡均抽,死狀恐怖嫁赏,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情到忽,我是刑警寧澤橄教,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站喘漏,受9級(jí)特大地震影響护蝶,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜翩迈,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一持灰、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧负饲,春花似錦堤魁、人聲如沸喂链。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)椭微。三九已至,卻和暖如春盲链,著一層夾襖步出監(jiān)牢的瞬間蝇率,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工刽沾, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留本慕,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓侧漓,卻偏偏與公主長(zhǎng)得像锅尘,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子布蔗,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容