最近一直都在作一個管理後臺的重寫,原項目是.net 4.x + layui作的一個SPA應用,暫不談後臺和數據庫(談的話又有好多要吐槽的了),單單從React開發的角度上來談本身經歷的問題吧。前端
這篇水文就不從特別技術的角度來說,react、redux什麼的用法就不涉及了,更多的是最近的代碼組織的一點總結。還但願可以有大佬能指點一下,react開發到底如何組織。react
常見的React技術棧就是React+Redux,其中還涉及有redux-thunk和react-redux,由於傳統的react單向數據流在組件交互頻繁且組件嵌套過深的狀況下數據傳遞效率很低,因此引入redux這樣的解決方案做爲數據集中管理的場所,便於數據交互。數據庫
最初個人使用中很天然的選用react+redux做爲解決方案,可是後續的問題也產生了,首先,組件的數據交互並無那麼複雜,假設組件交互要跨過中間一個組件,那麼引入redux是有必定必要性的,可是,若是組件的交互是徹底是父子關係,那麼redux反而會拖累開發的節奏和流暢行。redux
而後就是,redux+redux-thunk解決方案在項目代碼項目文件的組織上相對繁瑣,若是使用redux-thunk,除了你正常使用redux要使用的:一個actionType文件用於定義action信息、一個actions文件經過參數構造action、一個reducer用於根據action對state進行處理(state通常也在這個文件裏),你還要在action中定義thunk-action,也就是說針對一個請求的action,一般狀況下你須要寫一個觸發的thunk-action和三個請求狀態action分別是start、success和fail,固然在項目小的時候,代碼還不至於難以管理,可是當項目逐步增大的時候,對項目結構的設計和劃分就變得異常重要,由於當不正常劃分時,很容易出現一個文件裏有幾百行的action信息、action構造函數和reducer的switch-case。後端
還有一個問題就是connect組件問題,使用react-redux的connect方法能夠有效的鏈接基礎組建與業務state、action,可是不要過於依賴這樣的方式,最優的方法仍然是原始的組件見的交互,當試着去對基礎組件使用connect接入redux時,本來的數據交互邏輯從主組件向基礎組件滑坡,最終致使不得不去在維護主組件邏輯的同時經過action影響state去控制基礎組件,這樣在多個文件中切換(主組件、actionType、actions、reducer)很容易出現失誤。bash
上面的問題我目前的總結就是兩點:服務器
1.能不用redux儘可能不用redux進行數據管理,固然這個值根據項目的實際數據交互程度而定的app
2.合理劃分文件目錄結構,必定要在開發前作到心中有數,通常來講數據交互不頻繁的就拆成不一樣的reducer,同一個reducer內action和action-handle過多的狀況下就根據組建拆分紅不一樣的文件,最後只要把全部的文件經過import整合成一個文件去處理就行了,這樣有利於在開發中action和調用action組建的定位。函數
3.項目的組件鏈接儘可能使用原始的方式,而不要接入redux。而redux的接入通常在模塊的層級上接入。這樣能有效的避免因redux充斥項目而致使開發中邏輯隨意流竄而理清邏輯須要在多個文件中跳轉而引起的效率低下問題。優化
4.能夠考慮使用redux-actions等輔助庫來減輕action和reducer代碼的繁瑣
如下是我採用的目錄結構
├── src
│ ├── Bcomponent //業務組建
│ ├── common //通用內容
│ ├── components //基礎組件
│ ├── pages //頁面
│ │ ├── batch //業務模塊
│ │ ├── commonTool
│ │ └── project
│ │ ├── landProject //業務頁面
│ │ │ ├── coordinates //頁面的獨立組件
│ │ │ ├── detail
│ │ │ ├── docs
│ │ │ ├── mapperview //每一個獨立組件下都有本身的action和reducer代碼文件方便查找
│ │ │ ├── measureplan
│ │ │ ├── pdfViewer
│ │ │ ├── _redux //業務頁面的redux相關內容
│ │ │ ├── villageeditor
│ │ │ └── villagelist
│ │ ├── minutes
│ │ │ ├── minutesDetail
│ │ │ └── _redux
│ ├── redux //全局redux
│ │ ├── common
│ │ ├── commonSaga
│ │ ├── saga
│ │ └── store
複製代碼
在目錄結構設計上必定要下工夫,合理的設計目錄結構對開發的思路理清至關重要
react開發最重要的就是組件的開發與使用,在我兩三個月的智障操做下,我認爲組件的開發應該保證這樣的特性:
項目開發中代碼要保證合理的封裝,而且保證代碼的整潔。這一點我後續也要深刻研究《重構》這本書。
目前個人我的總結簡單的就是這麼幾個方面:
一個項目的先後端數據傳輸格式必定要協調好,不然有你受的(大哭)。若是請求出錯了,後端必定要返回一個錯誤碼附加錯誤內容,是一個200 ok + 錯誤內容string簡直要死了,前端不得很少寫一個string的錯誤判斷。
另外,若是你的業務是一個傻*的後臺,在先後數據交換沒法優化的狀況下,那麼請放棄對前端的任何深刻重構吧,它絕對會浪費你的青春
一個項目最重要的是防止其逐步腐爛,拯救一個被Green Day感染的項目(jojo梗)簡直讓人崩潰,並且最重要的是公司的狀況,我如今反對任何盲目的重構和重寫,若是想作這個事情,首先要對公司有一個明確的認識,狀況是否容許作,並且老闆是否對這件事情高度關注(口頭說不算,要看他對業務的計劃和本人的狀況)。好了就這麼多,發發牢騷,還得繼續從坑裏面爬出來,真難受。
寫完一點都不想從新排版,心累