最近項目做多頁面應用使用到了,react + webpack + redux + antd去構建多頁面的應用,本地開發用express去模擬服務端程式(個人覺得可以換成dva).所以在這裡吐槽一下我自己對於redux的一些見解。 Redux是狀態管理的服務,可以當作是mvc中的controller層 ...
最近項目做多頁面應用使用到了,react + webpack + redux + antd去構建多頁面的應用,本地開發用express去模擬服務端程式(個人覺得可以換成dva).所以在這裡吐槽一下我自己對於redux的一些見解。
Redux是狀態管理的服務,可以當作是mvc中的controller層,你也可以把它認為是mvvm中vm層。雖然它本身受到Flux的影響很大,但是它的核心概念缺很簡單,就是Redue也就是ES5中Array.prototype.reduce,這個reduce用於合併數組的元素,例:
Redux認為,一個應用程式中,所有的應用模塊之間需要共用訪問的數據,都應該在Store的State裡面。這點和React的state和props的概念是一致的。外面的props儘量不去改變,而改變的只是內部的狀態state,而有shouldComponentUpdate這個生命周期函數,我們可以優化react.
但是有一個原則是沒有改變的,就是在你不知道你是否需要redux的時候,你肯定是不需要它。就像Flux的作者說的那樣,Flux就像眼鏡,你會知道你在什麼時候需要它。
下麵介紹一些本人對於redux的一些使用經驗:
(1)你最好保證State的沒個節點都是immutable的,這樣確保在消費State的時候只需要進行簡單的引用就可以了。從而避免Deep Equal 的遍歷過程。也就是說你的state最好是鍵值的對象形式,避免數組形式的非state最底層值的形式。
(2)reducer為純函數,如果判斷太多,可以使用combineReducers(),去組合reducer,分離reducer
(3)合理管理你的state.並不需要所有的數據都在State裡面,雖然這也是可以,總之一句話,合適你的才是最好的,適用需要的代碼才是最好的。
(4)建議所以的asyncAction都應該被管理。這很大程度上,可以提高用戶體驗。建議適用Promise async/await 去實現非同步的管理。