Redux

參考鏈接:https://www.ibm.com/developerworks/cn/web/wa-manage-state-with-redux-p1-david-geary/

應用程序狀態通常很複雜,Redux Javascript庫是一個可以減少狀態維護過程中的錯誤針對Javascript應用程序的可預測狀態容器。

Redux來自React社區,是Facebook的Flux架構的一種簡化實現,但是它並不依賴React,也就是除了React還可以用於其他框架。

Redux來源於Reducer + flux。Flux本質上採用了MVC結構,引入了很高的複雜性,但Redux借用了Elm[一個基於不可變數據結構和純函數的強大反應式函數編程語言。]的縮減程序Reducer的概念降低了Flux的複雜性。純函數是沒有副作用的函數,Redux縮減程序是計算應用程序狀態的純函數。

Redux的3條原則:
- 應用程序狀態存儲在單個對象中。
- 應用程序狀態不可變,只能通過描述狀態更改的操作徹底替換。
- 縮減程序根據當前狀態和某個操作來創建下一個狀態。

  • 應用程序狀態存儲在單個對象中
    Redux通過一個Javascript對象管理狀態,這個對象稱爲數據存儲,包含了應用程序的所有狀態。
    優點:

    1. 狀態集保存在一個對象中,使得在閱讀代碼時推斷應用程序數據變的更容易。
    2. 所有數據在一個位置,更容易調試和測試應用程序。
    3. 應用程序狀態存儲在一個對象中,更容易持久保存應用程序的整體狀態。
  • 應用程序狀態不可變
    使用Redux,修改應用程序狀態是不被允許的,只能在需要時,通過操作[不可變的Javascript對象,用於描述狀態更改]使用新狀態替換現有狀態。

儘管封裝狀態更改時使用了模式,但封裝狀態更改遠不止使用模式那麼簡單,所以最好連同引用一起刪除。
優點:能夠實現無限撤銷和重做[類似於時光機]。操作也是按照嚴格的順序執行,所以不會發生競爭條件。

  • 縮減程序創建一種新狀態
    縮減程序是純Javascript函數:
    1. 根據當前狀態和某個操作創建一個新狀態
    2. 集中數據變化
    3. 可處理所有或部分狀態
    4. 可組合和重用

Redux的可預測狀態容器:給定任何狀態和任何操作,可以肯定的預測應用程序的下一個狀態,使無限撤銷/重做和實時編輯得以實現。

Redux三部分:操作[action]、縮減程序[reducer]和存儲[store]

每個Redux應用程序僅有一個存儲,每個存儲僅有一個縮減程序。

發佈了52 篇原創文章 · 獲贊 1 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章