談談React那些小事

前言

說起React,那也是近一年多時間火起來的前端框架拙毫,其在Facebook的影響力和大力推廣下依许,已然成為目前前端界的中流砥柱。在如今的前端框架界缀蹄,React峭跳、Vue、Angular三分天下的時代已經(jīng)到來缺前,而曾經(jīng)jQuery一統(tǒng)天下的局面已一去不復返蛀醉。

三分天下,前端雖亂衅码,但美其名曰“繁榮”拯刁。每一次突破性的革命必定會迎來成千上萬的追隨者,我們可以看一下一份來自NPM的統(tǒng)計數(shù)據(jù):

上圖統(tǒng)計的是全球范圍內React逝段、Vue垛玻、Angular在npm中的月下載次數(shù)割捅,統(tǒng)計地址可以訪問:npm-stat。從圖中我們不難發(fā)現(xiàn)React雖初出茅廬帚桩,但其影響力已經(jīng)奠定了在前端框架中的霸主地位亿驾。

而對于React的開發(fā)者來說,如何利用React構建現(xiàn)代化的前端項目账嚎,產出高質量的前端代碼才是學習React的重點莫瞬。所以本文就我自己平時利用React開發(fā)項目的經(jīng)驗和個人見解,來談談在React項目中需要了解和容易忽略的“小事”郭蕉。

那些小事

俗話說“千里之堤毀于蟻穴”疼邀,在React開發(fā)中我們不能忙于進度而忽視了細節(jié)。

1.使用容器組件與展示組件

容器組件和展示組件名詞來自于redux文檔恳不。如果你想讓自己的React項目變得清晰可維護檩小,那么你需要了解并使用它們开呐。

這里我們將組件分成兩類烟勋,一類叫“容器組件”,我一般將它們放在containers文件夾下筐付。這一類組件可以理解為最頂層的組件卵惦,其功能僅僅做數(shù)據(jù)提取,然后渲染對應的子組件瓦戚。

另一類叫“展示組件”沮尿,我一般將它們放在components文件夾下。這一類組件可以理解為只具有展示性的子組件较解,其功能僅僅是展示性的畜疾,所有數(shù)據(jù)都通過 props 傳入。

這樣分類的好處在于:關注分離印衔,更易復用及維護啡捶,數(shù)據(jù)集中處理等。具體可以參見:譯文《容器組件和展示組件》

2.組件劃分不宜過細奸焙,層次不宜過深

曾經(jīng)有人問我React組件的劃分應不應該太細瞎暑,比如是不是可以把一個輸入框劃分為一個組件?

我個人認為組件不應該按照DOM元素來劃分与帆,而是應該按照功能來劃分了赌。如果你的一個頁面中包含了兩個功能,比如表格搜索玄糟、彈框查看勿她,就可以將其劃分為兩個子組件。

同樣的組件層次也不宜過深阵翎。很多時候會存在組件中包含組件的情況逢并,這樣就出現(xiàn)了組件之間的嵌套層次播揪。我個人認為組件間的嵌套層次不宜超過3層,如果嵌套層次太深會直接導致功能及狀態(tài)的難以維護筒狠,就像if else語句嵌套太深一樣猪狈。

3.Redux和state并不沖突

很多開發(fā)者可能會認為用了Redux來管理數(shù)據(jù)狀態(tài)后,我們的組件中就不需要state了辩恼。其實我個人認為Redux和state并不沖突雇庙。

Redux主要用于管理那些公用及異步的狀態(tài),而state一般用于管理組件獨有的狀態(tài)灶伊。如果你的組件中存在其不必和其他組件公用及非異步的單一數(shù)據(jù)疆前,那么你直接可以寫在state中,比如一些loading的狀態(tài)和顯示隱藏的狀態(tài)等聘萨。

巧妙的使用Redux和state可以幫助我們更好的管理數(shù)據(jù)流竹椒。

4.不要渲染當前用不到的組件

在用戶操作中,有些組件可能不是一開始展示頁面的時候就需要用到的米辐,比如某些彈框等胸完。這樣的組件除了將其隱藏外,我們最好不要讓它渲染在頁面上翘贮,當用戶點擊觸發(fā)的時候再進行渲染赊窥,這樣一來便起到了優(yōu)化加載的作用。

5.除了劃分組件還應劃分reducer

相比組件的劃分狸页,reducer的劃分也同樣重要锨能。隨著應用的膨脹,我們可以將拆分后的 reducer 放到不同的文件中, 以保持其獨立性并用于專門處理不同的數(shù)據(jù)域芍耘。

如果一個中大型的項目不劃分reducer址遇,會導致單一的reducer文件代碼過于冗長而難以維護。我們可以使用Redux提供的 combineReducers()來將拆分的reducer進行合并斋竞。詳見:Redux中文文檔倔约。

結語

事無巨細,人無完人窃页。一個優(yōu)秀的React項目并不代表其沒有缺點跺株,代碼優(yōu)化是一個長期的過程,唯有發(fā)現(xiàn)問題總結問題才能給我們帶來新的突破口脖卖。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末乒省,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子畦木,更是在濱河造成了極大的恐慌袖扛,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,807評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異蛆封,居然都是意外死亡唇礁,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,284評論 3 399
  • 文/潘曉璐 我一進店門惨篱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來盏筐,“玉大人,你說我怎么就攤上這事砸讳∽寥冢” “怎么了?”我有些...
    開封第一講書人閱讀 169,589評論 0 363
  • 文/不壞的土叔 我叫張陵簿寂,是天一觀的道長漾抬。 經(jīng)常有香客問我,道長常遂,這世上最難降的妖魔是什么纳令? 我笑而不...
    開封第一講書人閱讀 60,188評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮克胳,結果婚禮上平绩,老公的妹妹穿的比我還像新娘。我一直安慰自己毯欣,他們只是感情好馒过,可當我...
    茶點故事閱讀 69,185評論 6 398
  • 文/花漫 我一把揭開白布臭脓。 她就那樣靜靜地躺著酗钞,像睡著了一般。 火紅的嫁衣襯著肌膚如雪来累。 梳的紋絲不亂的頭發(fā)上砚作,一...
    開封第一講書人閱讀 52,785評論 1 314
  • 那天,我揣著相機與錄音嘹锁,去河邊找鬼葫录。 笑死,一個胖子當著我的面吹牛领猾,可吹牛的內容都是我干的米同。 我是一名探鬼主播,決...
    沈念sama閱讀 41,220評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼摔竿,長吁一口氣:“原來是場噩夢啊……” “哼面粮!你這毒婦竟也來了?” 一聲冷哼從身側響起继低,我...
    開封第一講書人閱讀 40,167評論 0 277
  • 序言:老撾萬榮一對情侶失蹤熬苍,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體柴底,經(jīng)...
    沈念sama閱讀 46,698評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡婿脸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,767評論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了柄驻。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片狐树。...
    茶點故事閱讀 40,912評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖鸿脓,靈堂內的尸體忽然破棺而出褪迟,到底是詐尸還是另有隱情,我是刑警寧澤答憔,帶...
    沈念sama閱讀 36,572評論 5 351
  • 正文 年R本政府宣布味赃,位于F島的核電站,受9級特大地震影響虐拓,放射性物質發(fā)生泄漏心俗。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,254評論 3 336
  • 文/蒙蒙 一蓉驹、第九天 我趴在偏房一處隱蔽的房頂上張望城榛。 院中可真熱鬧,春花似錦态兴、人聲如沸狠持。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,746評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽喘垂。三九已至,卻和暖如春绍撞,著一層夾襖步出監(jiān)牢的瞬間正勒,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,859評論 1 274
  • 我被黑心中介騙來泰國打工傻铣, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留章贞,地道東北人。 一個月前我還...
    沈念sama閱讀 49,359評論 3 379
  • 正文 我出身青樓非洲,卻偏偏與公主長得像鸭限,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子两踏,可洞房花燭夜當晚...
    茶點故事閱讀 45,922評論 2 361

推薦閱讀更多精彩內容