天天看點

資料管理工具Flux、Redux、Vuex的差別

目錄

  • 為什麼要進行資料管理?
  • 怎麼有效地進行資料管理?
  • 資料管理工具
    • 1. Flux
    • 2. Redux
    • 3. Vuex
  • 使用資料管理工具的場景
  • 相關資料
主要講解一下前端為什麼需要進行資料管理,有效的資料管理應該是什麼樣子的,最後挑選Flux、Redux、Vuex進行對比講解。

元件式開發的核心思路是MVC,Model層的資料發生變化,驅動View層的視圖發生變化。試想一個場景,如果ModelA觸發ModelB變化,導緻ViewB發生變化,ViewB發生變化時,觸發了ModelC變化,ModelC又觸發了其他Model的變化...,我們想知道一個View的變化究竟是那個資料導緻的,追查起來就很困難,于是就記錄資料的變化就很有必要了,其實換一個高大上的名字就是資料狀态管理。

1. 資料集中管理

view中的資料統一放置到一個倉庫(store)中,要渲染頁面的時候,從中取出目前狀态的資料(state),然後将state中的最新的資料通過props傳遞到元件中,然後渲染元件,實作試圖展現。

2. 精細化拆解資料操作

要修改store中的state,為了做到資料的操作可追溯,盡量将資料的操作拆解成一個個小函數,當然純函數最好。

3. 單向資料驅動

元件中不能直接修改state的值,修改state,隻能發出修改請求(action),由action觸發資料操作。

總之,資料集中管理就需要應用使用唯一的資料Tree,存放在store中;精細化拆解資料操作就是需要提供小而純的函數,來修改state;單就向資料驅動需要提供唯一能修改state的管道。

Flux資料流的順序是:

View發起Action->Action傳遞到Dispatcher->Dispatcher将通知Store->Store的狀态改變通知View進行改變

資料管理工具Flux、Redux、Vuex的差別

ps:基于Flux架構思想寫的一個小demo

Redux相對于Flux的改進:

  • 把store和Dispatcher合并,結構更加簡單清晰
  • 新增state角色,代表每個時間點store對應的值,對狀态的管理更加明确

Redux資料流的順序是:

View調用store.dispatch發起Action->store接受Action(action傳入reducer函數,reducer函數傳回一個新的state)->通知store.subscribe訂閱的重新渲染函數

資料管理工具Flux、Redux、Vuex的差別

ps:阮一峰老師的Redux+React小demo

  • 改進了Redux中的Action和Reducer函數,以mutations變化函數取代Reducer,
  • 無需switch,隻需在對應的mutation函數裡改變state值即可
  • 由于Vue自動重新渲染的特性,無需訂閱重新渲染函數,隻要生成新的State即可