最近項目作多頁面應用使用到了,react + webpack + redux + antd去構建多頁面的應用.因此在這裏吐槽一下我本身對於redux的一些看法。react
Redux是狀態管理的它也是單向數據流。雖然它自己受到Flux的影響很大,可是它的核心概念缺很簡單,就是Redue也就是ES5中Array.prototype.reduce,這個reduce用於合併數組的元素,它是基於一個React的component的接口,getChildContext接口實現的。下面是ReactClass的接口:webpack
var ReactClassInterface = { mixins: SpecPolicy.DEFINE_MANY, statics: SpecPolicy.DEFINE_MANY, propTypes: SpecPolicy.DEFINE_MANY, contextTypes: SpecPolicy.DEFINE_MANY, childContextTypes: SpecPolicy.DEFINE_MANY, // ==== Definition methods ==== getDefaultProps: SpecPolicy.DEFINE_MANY_MERGED, getInitialState: SpecPolicy.DEFINE_MANY_MERGED, getChildContext: SpecPolicy.DEFINE_MANY_MERGED, render: SpecPolicy.DEFINE_ONCE, // ==== Delegate methods ==== componentWillMount: SpecPolicy.DEFINE_MANY, componentDidMount: SpecPolicy.DEFINE_MANY, componentWillReceiveProps: SpecPolicy.DEFINE_MANY, shouldComponentUpdate: SpecPolicy.DEFINE_ONCE, componentWillUpdate: SpecPolicy.DEFINE_MANY, componentDidUpdate: SpecPolicy.DEFINE_MANY, componentWillUnmount: SpecPolicy.DEFINE_MANY, // ==== Advanced methods ==== updateComponent: SpecPolicy.OVERRIDE_BASE, };
Redux認爲,一個應用程序中,全部的應用模塊之間須要共享訪問的數據,都應該在Store的State裏面。這點和React的state和props的概念是一致的。外面的props儘可能不去改變,而改變的只是內部的狀態state,而有shouldComponentUpdate這個生命週期函數,咱們能夠優化reactweb
可是有一個原則是沒有改變的,就是在你不知道你是否須要redux的時候,你確定是不須要它。就像Flux的做者說的那樣,Flux就像眼鏡,你會知道你在何時須要它。redux
下面介紹一些本人對於redux的一些使用經驗:最好保證State的沒個節點都是immutable的,這樣確保在消費State的時候只須要進行簡單的引用就能夠了。從而避免Deep Equal 的遍歷過程。也就是說你的state最好是鍵值的對象形式,避免數組形式的非state最底層值的形式。reducer爲純函數,若是判斷太多,可使用combineReducers(),去組合reducer,分離reducer合理管理你的state.並不須要全部的數據都在State裏面,雖然這也是能夠,總之一句話,合適你的纔是最好的,適用須要的代碼纔是最好的。建議因此的asyncAction都應該被管理。這很大程度上,能夠提升用戶體驗。建議適用Promise async/await 去實現異步的管理。在redux中有不少的中間件,能夠加快開發效率。數組
總結:說白了就是你能夠把redux看成是mvc中的model,controller層,react它就是mvc中view層antd