React 項目目錄結(jié)構(gòu)優(yōu)化

隨著項目功能越來越多,代碼量越來越龐大。隨之而來的就是項目本身變得有點難以維護和理解了。比如:

  • 一開始沒有定開發(fā)規(guī)范,每個人都有自己不同的寫法。
  • 創(chuàng)建和存放代碼文件的方式不同,導(dǎo)致目錄結(jié)構(gòu)開始混亂。
  • 為了適應(yīng)某些需求,寫了一些臨時代碼。這種代碼一多后期維護就變得難以理解。
  • 頁面、組件都有業(yè)務(wù)邏輯,到處是業(yè)務(wù)邏輯導(dǎo)致后期看代碼就像是捉迷藏。
  • 頁面、組件之間耦合性太強。比如通過十幾個 props 和十幾個 event 來連接某個組件。

這些問題在項目初期還好。但是如果功能越堆越多。于是我就在想,如何去維護好這個項目呢。我想到了一句話:

高內(nèi)聚、低耦合

所以,我對于我現(xiàn)在的 React 項目,做了以下設(shè)計。

  • assets 目錄里面放所有的資源文件。雖然在某些頁面里面放上一些圖片資源引用起來很方便,但是頁面一多就會發(fā)現(xiàn)有很多圖片是一樣的。這時候統(tǒng)一存放資源文件就可以復(fù)用一些文件。避免不必要的重復(fù)文件占空間。
  • components 目錄里存放公共的組件。我對于組件的定義是盡量只實現(xiàn) UI 呈現(xiàn)方面的事情,業(yè)務(wù)邏輯可以通過事件傳遞出去,交給 page 和 module 來實現(xiàn)。
  • pages 目錄里存放路由級別的頁面。
    • 由于項目中使用了 redux,所以每個頁面會有一個 container 用來獲取 redux 數(shù)據(jù)和定義 dispatch 事件。
    • index 里面承載了大部分頁面邏輯的處理,以及頁面結(jié)構(gòu)的呈現(xiàn)。
    • model 用于定義 redux state 以及數(shù)據(jù)操作方式。
    • components 目錄用于存放僅僅在本頁面中會用到的組件。
  • modules 目錄里面存放了非路由級別的功能模塊。它的目錄結(jié)構(gòu)和 pages 目錄完全一致。只不過這個目錄下的模塊不能被路由直接訪問到。
  • service 目錄用于配置和定義 API 接口。
  • utils 用于定義公共工具函數(shù)。

并且,想了一些原則:

  • 所有資源都要存放在同一 assets 目錄下,方便復(fù)用和查找。
  • component 組件(不管是公共的還是頁面私有的)盡量不接觸業(yè)務(wù),僅僅用于 UI 展現(xiàn)。
  • page 和 module 通過 container 和 model 來連接 redux 數(shù)據(jù),通過 index 來處理大多數(shù)頁面邏輯。
  • 通過 props 和回調(diào)函數(shù)傳遞數(shù)據(jù)盡量不要超過三層。如果一個 prop 屬性會存在 A -> B -> C -> D -> E,并且回調(diào)函數(shù)是從 E 到 A 的,這必然不合理。
  • 為了低耦合,盡量少的使用 props 和 events。定義 events 的參數(shù)也是也少越好。
  • page 不存在 props,module 盡量少定義 props,降低耦合性。
  • 一般只在 page 中使用 module,避免 module 中使用其他 module 形成套娃。

最后

以上都是我自己基于高內(nèi)聚、低耦合的一些項目優(yōu)化的想法。我去網(wǎng)上找也沒有找到太適合我當前項目的方案。暫且一試。
如果有更好的最佳實踐,歡迎留言交流溝通。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容