Vuex與Redux的主要區別在哪裡,兩者各有什麼優缺點?

剛剛讀了Vuex的中文文檔,跑了一下DEMO。感覺Vuex雖然沒有強調Store的唯一性,但確實是這麼做的。另外,Mutations和Reducer也很像。請各位大神解答一下,兩者的區別, 以及在中、大型的移動端SPA項目中, 分別有什麼優缺點。


Vuex 其實是一個針對 Vue 特化的 Flux,主要是為了配合 Vue 本身的響應式機制。當然吸取了一些 Redux 的特點,比如單狀態樹和便於測試和熱重載的 API,但是也選擇性的放棄了一些在 Vue 的場景下並不契合的特性,比如強制的 immutability(在保證了每一次狀態變化都能追蹤的情況下強制的 immutability 帶來的收益就很有限了)、為了同構而設計得較為繁瑣的 API、必須依賴第三方庫才能相對高效率地獲得狀態樹的局部狀態等等(相比之下 Vuex 直接用 Vue 本身的計算屬性就可以)

所以 Vue + Vuex 會更簡潔,也不需要考慮性能問題,代價就是 Vuex 只能和 Vue 配合。Vue + Redux 也不是不可以,但是 Redux 作為一個泛用的實現和 Vue 的契合度肯定不如 Vuex。


Vuex 優點是 API 簡直太簡潔(簡單)了,缺點嘛作者也說了只適用於 Vue。但是 React 黨想用怎麼辦呢?請看:https://zhuanlan.zhihu.com/p/26568350


我覺得像Redux和Vuex這樣的狀態管理框架比較適合SPA中狀態管理比較複雜的項目,如可視化在線編輯類應用(在線ppt,在線畫圖等),藉助統一狀態管理框架,能夠方便實現撤銷和重做,用戶行為監控,等這類需求。其他偏展現的,感覺真是沒有什麼必要,反而把簡單的事情搞複雜了。


一般項目應該僅需要公共數據存儲管理即可,到底什麼樣的程序算是複雜到需要這樣的pattern呢?目前從github中的例子中展示的樣例都是為了展示vuex的api,還是需要根據說服力的例子,也許把官方hackernews改造一下可以


推薦閱讀:

怎麼樣看待AngularJS從1升級到2的不兼容問題?
為什麼window.undefined要比undefined耗時?
阿里搶月餅的js代碼是如何實現的?
前端開發應更多地使用多層嵌套對象的結構,還是拍平數組進行引用的結構?
Node.js的學習,是在windows下進行還是Linux下進行更好?

TAG:JavaScript | Vuejs | Redux |