redux
是一套state
流的處理機制。redux
主要有
三要素
:segmentfault
store 【長官】 管理狀態,給某個士兵發命令app
action 【命令】 一種長官和士兵之間溝通的方式函數
reducer 【士兵】 執行命令,並反饋給長官學習
主要有
三層數據流
:ui
長官
下達命令
並把當前任務狀態
告訴士兵
=>spa
士兵
執行命令反饋任務狀態
給長官
=>3d
長官
更新任務狀態
日誌
全部狀態都在一顆惟一的state
樹種code
Action經過type,代表了我要修改什麼東東,至關於一個指令
{ type: 'ADD_TODO', text: 'Build my first Redux app' }
Action通常經過Action建立函數生成
// actions.js export default function todos(type, a, b) { return { type, a, b } }
// reducers.js export default function todoApp(state, action) { switch (action.type) { case 'add': return Object.assign({}, state, { result : action.a + action.b }) case 'sub': return Object.assign({}, state, { result : action.a - action.b }) default: return state } }
維持應用的 state;
提供 getState()
方法獲取 state
;
提供 dispatch(action)
方法更新 state
;
經過 subscribe(listener)
註冊監聽器;
經過 subscribe(listener)
返回的函數註銷監聽器。
能夠說store是真正的state管理者,其餘的,如action
是命令,reducer
是執行命令的士兵。
// store.js import { createStore } from 'redux'; import { todos } from './actions'; import { todoApp } from './reducers.js'; let store = createStore(todoApp); // 打印初始狀態 console.log(store.getState()) // 每次 state 更新時,打印日誌 // 注意 subscribe() 返回一個函數用來註銷監聽器 let unsubscribe = store.subscribe(() = console.log(store.getState()) ) // 發起一系列 action store.dispatch(todos('add', 100, 99)); store.dispatch(todos('sub' ,100, 99)); // 中止監聽 state 更新 unsubscribe();