隨着前端單頁面開發愈來愈複雜,javascript須要管理愈來愈多的狀態state。若是一個model的變化引發另外一個model的變化,view的變化,那麼當 view 變化時,就可能引發對應 model 以及另外一個 model 的變化,依次地,可能會引發另外一個 view 的變化。直至你搞不清楚到底發生了什麼。state 在何時,因爲什麼緣由,如何變化已然不受控制。 當系統變得錯綜複雜的時候,想重現問題或者添加新功能就會變得舉步維艱。Redux使得state在變化和異步中可預測。javascript
在使用redux的應用中,全部的stae都以一個對象樹的形式存儲在單一的store中,唯一改變 state 的辦法是觸發 action,action 如何改變 state 樹,須要編寫 reducers。前端
Action 把數據從應用傳到 store 。它是 store 數據的惟一來源。經過 store.dispatch() 將 action 傳到 store。
Reducers 指定了應用狀態的變化如何響應 actions 併發送到 store 的,actions 只是描述了有事情發生了這一事實,並無描述應用如何更新 state。更新state的函數稱爲reducer,它是一個純函數,接受舊的state和action,返回新的state。reducer必須是一個純函數,不能進行以下操做:java
Redux提供了combineReducers函數,該函數接受一個對象,做用是生成一個函數,這個函數來調用你的一系列 reducer,每一個 reducer 根據它們的 key 來篩選出 state 中的一部分數據並處理,而後這個生成的函數再將全部 reducer 的結果合併成一個大的對象。沒有任何魔法。正如其餘 reducers,若是 combineReducers() 中包含的全部 reducers 都沒有更改 state,那麼也就不會建立一個新的對象。react
Store 是action和reader之間的橋樑,是把它們聯繫到一塊兒的對象。Redux 應用只有一個單一的 store
Store有如下功能:redux
使用createStore建立一個Store併發
const Store = createStore(reducers,other)
Redux是單向數據流。單向數據流的好處:意味着應用中全部的數據都遵循相同的生命週期,這樣可讓應用變得更加可預測且容易理解。同時也鼓勵作數據範式化,這樣能夠避免使用多個且獨立的沒法相互引用的重複數據。app
使用react-redux。在react-redux的使用中,關注兩個方法:Provider和connectdom