我為什么要修改react-native-root-toast庫(kù)

1睬辐、為什么會(huì)選擇這個(gè)庫(kù)作為toast提示框架疗垛?

1.1 跨平臺(tái)症汹,兼容iOS和Android

????眾所周知,react-native本身是作為一個(gè)跨平臺(tái)的解決方案贷腕,因此在項(xiàng)目中背镇,如果能夠同時(shí)在iOS和Android上跑咬展,那是最好完美的結(jié)果。react-native-root-toast庫(kù)(以后文中以root-toast代稱)是一個(gè)純JavaScript的解決方案瞒斩,跨平臺(tái)破婆。

1.2 提供很多的自定義屬性

? ? 一個(gè)好用的庫(kù),必然會(huì)提供給用戶非常多的定義屬性胸囱,root-toast自然也例外祷舀。除了提供修改背景顏色,陰影等基本屬性旺矾,還提供了一個(gè)toast生命周期的回調(diào)函數(shù)蔑鹦,提供了點(diǎn)擊提示框時(shí)消失的功能,提供了修改一個(gè)toast的位置的屬性箕宙,這三條都很非常的新穎且在某些特殊的下達(dá)到意想不到的效果嚎朽。

1.3 提供函數(shù)調(diào)用以及組件調(diào)用兩種方法

? ? 這個(gè)組件最吸引我的一個(gè)地方是它可以通過(guò)函數(shù)調(diào)用的方式來(lái)顯示一個(gè)toast,這意味著我可以在任何地方想要彈出一個(gè)提示框時(shí)柬帕,就能彈出一個(gè)提示框哟忍。而不必考慮將組件寫在哪個(gè)頁(yè)面合適,更興奮的是陷寝,它也不會(huì)污染每個(gè)頁(yè)面锅很。如果你本身就是一個(gè)iOS開發(fā)者,想必你一定知道SVProgressHUD凤跑,root-toast也能做到像它那么靈活爆安。

1.4 在npm上的下載量已經(jīng)非常高

? ? 一個(gè)庫(kù),好不好用仔引,看下載量就知道扔仓。root-toast庫(kù)顯然已經(jīng)經(jīng)受住了大家考驗(yàn)。成為比較穩(wěn)定且好用的toast框架了咖耘。

2翘簇、為什么這個(gè)庫(kù)讓我用得不爽?

2.1 沒(méi)有提供自定義圖標(biāo)

? ? 在國(guó)內(nèi)儿倒,絕大部分app的toast提示框都是上邊顯示一個(gè)圖標(biāo)版保,下邊顯示提示文本。一個(gè)提示框夫否,只顯示一段干巴巴的提示語(yǔ)彻犁,先不說(shuō)產(chǎn)品經(jīng)理會(huì)不會(huì)答應(yīng),作為一個(gè)想讓自己爽的程序員首先就不答應(yīng)了凰慈。

2.2 沒(méi)有提供背景mask

? ? 項(xiàng)目通常也會(huì)存在這樣一個(gè)需求:當(dāng)一個(gè)toast提示框顯示時(shí)汞幢,需要一個(gè)背景遮罩,以突出提示框的內(nèi)容溉瓶。同時(shí)急鳄,在顯示一個(gè)toast時(shí),就不能再點(diǎn)擊其他地方堰酿,進(jìn)行任何觸摸操作了疾宏。root-toast也沒(méi)有提供給我們相關(guān)的屬性來(lái)設(shè)置

2.3 存在不合理的地方

? ? 2.3.1 使用root-toast彈出一個(gè)toast提示框,待提示框消失触创。此時(shí)這個(gè)提示框仍未消失坎藐,只是隱藏了而已。

通過(guò)一個(gè)例子來(lái)說(shuō)明:我們使得Toast彈出多次提示框哼绑,然后通過(guò)在iOS上查看視圖分層情況岩馍,如下圖:


頁(yè)面UI


經(jīng)過(guò)多次彈框后,


此時(shí)頁(yè)面的層次結(jié)構(gòu)

正常邏輯下抖韩,當(dāng)一個(gè)toast提示框消失之后蛀恩,它就應(yīng)該銷毀了,然而root-toast庫(kù)卻只是隱藏茂浮,從內(nèi)存占用的角度來(lái)說(shuō)双谆,這樣的選擇并不明智∠浚可以說(shuō)是內(nèi)存泄漏顽馋。

? ? 2.3.2 同一時(shí)間彈出多個(gè)提示框,root-toast的處理邏輯是讓所有提示框疊加在一起幌羞,于是就出現(xiàn)了如下難看的畫面:


提示框重疊效果

3寸谜、react-native-root-tips做了什么事情?

? ??上一小節(jié)提到的問(wèn)題属桦,我最終整理成為新的一個(gè)庫(kù)react-native-root-tips熊痴,在100%兼容root-toast庫(kù)下,新增了一下屬性和方法

? ? 3.1 增加全局修改默認(rèn)樣式方法setDefaultOptions()

? ? 假設(shè)用戶并不滿意默認(rèn)的提示框樣式, 而想要自定義樣式的時(shí)候, 使用root-toast就不得不每次都需要在show()方法里面?zhèn)魅胱远x樣式地啰。顯然愁拭,這樣是非常重復(fù)且瑣碎的,而且也并不能全局修改亏吝。故root-tips提供了一個(gè)全局修改默認(rèn)選項(xiàng)的方法setDefaultOptions()岭埠,使用方法如下:

//you can set a global default options you like

Tips.setDefaultOptions({

????showLoading: true,

????backgroundColor: 'gray',

????opacity: 0.95,

????textColor: 'white',

? ? // ........

????// setting image you like

????imageLoading: require('xxxxxxxxxx'),

????imageSuccess: require('xxxxxxxxxx'),

????imageFail: require('xxxxxxxxxx'),

????imageInfo: require('xxxxxxxxxx'),

????imageWarn: require('xxxxxxxxxx'),

});

? ? 3.2 提供便利方法

????即便我們?cè)O(shè)置了setDefaultOptions方法,當(dāng)要彈出一個(gè)加載中蔚鸥、成功惜论、失敗等等的提示框時(shí),在root-toast庫(kù)中僅僅只提供了一個(gè)show()方法止喷,因此我們還不得不需要再次指定圖片馆类。這一過(guò)程也是非常的麻煩的,而且不靈活弹谁。為此root-tips庫(kù)提供了幾個(gè)常用的便利構(gòu)造方法:showLoading/showSuccess/showInfo/showWarn/hide乾巧。使用方法也非常簡(jiǎn)單了句喜,如下

// show a loading tips

// you need call Tips.hide() to make tips disappear

Tips.showLoading('loading...');

// show a successful tips

Tips.showSuccess('wow! success');

// show a failed tips

Tips.showFail('em...failed');

// show a Info tips

Tips.showInfo('info tips');

// show a warning tips

Tips.showWarn('warning');

// ** you can call hide() to hide showing tips **

// Tips.hide();

與此同時(shí),如果你想要設(shè)置自定義的圖標(biāo)沟于,你可以直接在setDefaultOptions()方法里面指定相應(yīng)的圖片了咳胃。

????3.3 新增了以下屬性:

Name ? ? ? ? ? ? ? ? ? ? ? | Default ? ? ? ? ? ? ? ?? |? Type ?? ????????????| Description

----------------------------------------------------------------------------------------------

showLoading ? ? ? ??| null ? ? ? ? ? ? ? ? ? | Function ? ? ? ? ? ?| convenience method,show an Loading tips

showSuccess ? ? ? ??| null ? ? ? ? ? ? ? ? ?? | Function ? ? ? ? ?| convenience method,show an Success tips

showFail ? ? ? ? ? ? ? ? | null ? ? ? ? ? ? ? ? ?? | Function ? ? ? ? ?| convenience method,show an Fail tips

showInfo ? ? ? ? ? ? ? ?| null ? ? ? ? ? ? ? ? ?? | Function ? ? ? ? ? ?| convenience method,show an Info tips

showWarn ? ? ? ? ? ? ?| null ? ? ? ? ? ? ? ? ?? | Function ????????????| convenience method,show an Warn tips

hide ? ? ? ? ? ? ? ? ? ? ? ? | null ? ? ? ? ? ? ? ? ?? | Function???????????? | hide showing tips

imageLoading ? ? ? ?| null ? ? ? ? ?? ? ? ? ? | Object ? ? ? ? ? ? ? ? | showLoading method custom Image

imageSuccess ? ? ? ?| null ? ? ? ? ?? ? ? ? ? | Object ? ? ? ? ? ? ? ?| showSuccess method custom Image

imageFail ? ? ? ? ? ? ? ?| null ? ? ? ? ?? ????? ? ? ? | Object ? ? ? ? ? ? | showFail method custom Image

imageInfo ? ? ? ? ? ? ? ?| null ? ? ? ? ? ? ? ? ? ? ? | Object????????????? | showInfo method custom Image

imageWarn ? ? ? ? ? ? ?| null ? ? ? ? ? ? ? ? ? ? ?| Object ? ? ? ? ? ? ? ?| showWarn method custom Image

textFont ? ? ? ? ? ? ? ? ? | 14 ? ? ? ? ? ? ? ? ? ? ? ?| Number ? ? ? ? ? ? | text's font

mask ? ? ? ? ? ? ?????????? | false ? ? ? ? ? ? ? ? ? ?| Bool ? ? ? ? ? ? ? ? ? | If can touch other place when shown

maskColor ? ? ? ? ? ????| string ? ? ? ? ? ? ? ? ?| Bool ? ? ? ? ? ? ? ? ? | The mask's color

maskOpacity ? ? ? ? ? | false ? ? ? ? ? ? ? ? ? ?| Bool ? ? ? ? ? ? ? ? ?| The mask's opacity

image ? ? ? ?? ? ? ???????? | null ? ? ? ? ? ? ? ? ? ? ?| Object ? ????????????| show image icon that you like. notice: if you setting image/showSuccess/showFail/showLoading at once, the priority is descendant

imageStyle ? ? ? ?? ????| null ? ? ? ? ? ? ? ? ? ? ?| Object ????????????? | the image style?

showText ? ? ? ? ? ? ? ? | true ? ? ? ? ? ? ? ? ? ? | Bool ? ? ? ? ? ? ? ? ? | If show text

showSuccess ? ? ? ? ?| false ? ? ? ? ? ? ? ? ? | Bool ? ? ? ? ? ? ? ? ? | If show default success icon

showFail ? ? ? ? ? ? ? ? ?| false ? ? ? ? ? ? ? ? ? ?| Bool ? ? ? ? ? ? ? ? ? | If show default? fail icon

showLoading ? ? ? ? ?| false ? ? ? ? ? ? ? ? ? ?| Bool ? ? ? ? ? ? ? ? ? | If show default? loading icon


? ? 對(duì)于同一時(shí)間彈出多個(gè)提示框的情形,root-tips會(huì)將上一個(gè)提示框先關(guān)閉旷太,然后再顯示展懈。同時(shí),如果一個(gè)提示框消失了供璧,那么這個(gè)提示框就被銷毀了存崖。

4、感謝

? ? 感謝react-native-root-toast的作者提供了這么優(yōu)秀的庫(kù)睡毒。針對(duì)以上的問(wèn)題来惧,由于個(gè)人知識(shí)淺薄,難免會(huì)對(duì)作者的用意造成誤解演顾,如果有讀者發(fā)現(xiàn)錯(cuò)誤违寞,敬請(qǐng)斧正。最后偶房,希望大家會(huì)喜歡這個(gè)庫(kù)react-native-root-tips趁曼,順便給個(gè)star,非常感謝棕洋。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末挡闰,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子掰盘,更是在濱河造成了極大的恐慌摄悯,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,084評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件愧捕,死亡現(xiàn)場(chǎng)離奇詭異奢驯,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)次绘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門瘪阁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人邮偎,你說(shuō)我怎么就攤上這事管跺。” “怎么了禾进?”我有些...
    開封第一講書人閱讀 163,450評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵豁跑,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我泻云,道長(zhǎng)艇拍,這世上最難降的妖魔是什么狐蜕? 我笑而不...
    開封第一講書人閱讀 58,322評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮卸夕,結(jié)果婚禮上馏鹤,老公的妹妹穿的比我還像新娘。我一直安慰自己娇哆,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,370評(píng)論 6 390
  • 文/花漫 我一把揭開白布勃救。 她就那樣靜靜地躺著碍讨,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蒙秒。 梳的紋絲不亂的頭發(fā)上勃黍,一...
    開封第一講書人閱讀 51,274評(píng)論 1 300
  • 那天,我揣著相機(jī)與錄音晕讲,去河邊找鬼覆获。 笑死,一個(gè)胖子當(dāng)著我的面吹牛瓢省,可吹牛的內(nèi)容都是我干的弄息。 我是一名探鬼主播,決...
    沈念sama閱讀 40,126評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼勤婚,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼摹量!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起馒胆,我...
    開封第一講書人閱讀 38,980評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤缨称,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后祝迂,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體睦尽,經(jīng)...
    沈念sama閱讀 45,414評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,599評(píng)論 3 334
  • 正文 我和宋清朗相戀三年型雳,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了当凡。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,773評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡纠俭,死狀恐怖宁玫,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情柑晒,我是刑警寧澤欧瘪,帶...
    沈念sama閱讀 35,470評(píng)論 5 344
  • 正文 年R本政府宣布,位于F島的核電站匙赞,受9級(jí)特大地震影響佛掖,放射性物質(zhì)發(fā)生泄漏妖碉。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,080評(píng)論 3 327
  • 文/蒙蒙 一芥被、第九天 我趴在偏房一處隱蔽的房頂上張望欧宜。 院中可真熱鬧,春花似錦拴魄、人聲如沸冗茸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)夏漱。三九已至,卻和暖如春顶捷,著一層夾襖步出監(jiān)牢的瞬間挂绰,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工服赎, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留葵蒂,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,865評(píng)論 2 370
  • 正文 我出身青樓重虑,卻偏偏與公主長(zhǎng)得像践付,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子缺厉,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,689評(píng)論 2 354

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

  • React Native優(yōu)秀博客荔仁,以及優(yōu)秀的Github庫(kù)列表(很多英文資料源自于[awesome-react-n...
    董董董董董董董董董大笨蛋閱讀 10,613評(píng)論 4 162
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,095評(píng)論 25 707
  • 簡(jiǎn)短說(shuō)明 收錄一些好用的RN第三方組件,以方便日常的使用芽死,大家有什么推薦的也可以跟我說(shuō)乏梁,我加進(jìn)去。如有冒犯关贵,可以聯(lián)...
    以德扶人閱讀 43,635評(píng)論 44 214
  • R:自我效能感和學(xué)業(yè)成就之間也有可能是一種相反的作用方向遇骑,即成績(jī)?cè)胶玫膶W(xué)生更會(huì)對(duì)自己完成事情的能力充滿信心。目前的...
    sun588閱讀 140評(píng)論 0 0
  • 別總沉浸在自己的世界揖曾。你的世界很小落萎,沒(méi)有多大的變化與起伏,可能會(huì)深陷在自己的世界里不能自拔炭剪、固步自封练链。適時(shí)的跳出你...
    翱藍(lán)閱讀 3,167評(píng)論 0 1