結構分爲四個函數
視圖 view
動做 action
派發器 dispatcher
數據商店 storeui
流程:
用戶操做視圖 視圖(view)發送動做(action)到派發器(dispatcher)
由派發器(dispatcher) 對動做類型(action.type)作判斷
而後調用數據商店(store)的相應方法來操做數據模型(store.state)
最後由數據商店(store)通知視圖(view)進行更新this
在完整的案例中
action只是起到傳遞數據的做用 本質就是一個對象而已spa
action最好用專門的工廠函數來進行建立(actions)prototype
在視圖中 經過調用action工廠函數來生產aciton 再由工廠函數將action發送給派發器對象
同時 在開發時 應將視圖部分進行拆分
拆分紅 : 容器組件和UI組件
UI組件純粹負責顯示數據
容器組件負責處理業務邏輯繼承
由容器組件提供更新視圖的方法
而後在組件加載完成時 將更新視圖方法提供給store生命週期
store應將其綁定到更新視圖專用的事件上flux
例如:
let EventEmiiter = require("events").EventEmiiter事件
let store = {
...EventEmiiter.prototype,
subscribe(cb){
this.on("update",cb)
},
setUsername(name){
this.state.name = name
this.emit("update") //通知視圖進行更新
},
unSubscribe(cb){ //注意: 在組件的卸載期 記得將更新視圖函數進行解綁
this.removeListener("update",cb)
}
}
flux重構步驟:
1 將視圖部分的頁面組件拆分紅容器組件和UI組件
UI組件全部數據(點擊等各類事件所調用的函數)均來自於props
容器組件可繼承 封裝好的 Controller 以自動實現綁定更新視圖方法及卸載組件時自動解綁
2 建立action工廠函數
定義一個初始化 的action工廠函數
請求須要的數據
將拿到的數據封裝到 action中
將action發送到dispatcher (經過.dispatch()方法)
3 在派發器中 配置對應的case
而且從action中拿到數據後 設置到對應store中便可
4 在容器組件的加載完成的生命週期函數中 調用上述步驟封裝好的action工廠函數
5 路由部分引入的組件 注意須要切換成 容器組件