Redux管理應用狀態的框架:數組
Redux是Flux思想的另外一種實現方式;架構
Flux(含Redux)貫徹的重要觀點——單向數據流;框架
Flux推翻了MVC框架,用了新的思惟來管理數據流轉;ide
MVC框架把應用分爲三部分:函數
MVC框架的缺點:this
對於很是巨大的代碼庫和龐大的組織,MVC框架很快變得很複雜。每新增一個功能時,對代碼的修改很容易引入新的Bug,不一樣模塊之間的依賴關係讓系統變得「脆弱且不可預測」。spa
Flux的特色:component
更嚴格的數據流控制;對象
Flux應用分爲四個部分:blog
Flux和MVC結構上的區別:
一個EventEmitter實例對象支持的函數:
如何使Dispatcher調用回調函數的順序是咱們預期的呢?
Dispatcher的waitFor函數。
Dispatcher的waitFor函數能夠接受一個數組做爲參數,數組中的每個元素都是Dispatcherregister函數的返回結果,即dispatchToken。這個waitFor函數告訴Dispatcher,當前的處理必須暫停,直到dispatchToken表明的那些已註冊回調函數執行結束才能繼續。
存在於Flux框架中的React組件須要實現的功能:
Flux的架構下,應用的狀態被放在Store中,React組件只扮演View的做用,被動根據Store的狀態來渲染。
Flux的優點主要表如今「單向數據流」的管理方式。
在Flux的理念中,改變界面就必須改變Store的狀態,改變Store的狀態就必須派發一個對象。
MVC最大的缺點就是沒法禁絕View和Model之間的直接對話。
在Flux的體系下,驅動界面的改變始於一個動做的派發,別無他法。
若是把Flux看作一個框架理念的話,Redux就是Flux的一種實現,除Redux以外,實現Flux的框架有Reflux、Fluxible等。
Redux的三個基本原則:
驅動用戶界面渲染,就要改變應用的狀態,但不是去修改狀態的值,而是建立一個新的狀態對象給Redux,由Redux完成新的狀態的組裝。
無
在Redux的框架下,一個React組件基本要完成兩個功能:
讓一個組件專一一件事,若是發現一個組件作的事情太多,就能夠把這個組件拆分紅多個組件,讓每一個組件依然只作一件事情。
容器組件(Container Component):承擔第一個任務的組件,即負責和Redux Store打交道的組件,處於外層;另外一種說法叫作聰明組件(Smart Component)。容器組件作的事情涉及一些狀態轉換。
展現組件(Dumb Component):承擔第二個任務的組件,即只專心負責渲染界面的組件,處於內層;另外一種說法叫作傻瓜組件(Dumb Component)。傻瓜組件其實就是一個純函數,根據props產生結果。
組件Context:就是所謂的「上下文環境」,讓一個樹狀組件上的全部組件都可以訪問的對象,爲了完成這個任務,須要上級組件和下級組件配合。
首先,上級組件要宣稱本身支持Context,而且提供一個函數來返回表明Context的對象。
其次,此上級組件之下全部的子孫組件,只要宣稱本身須要這個Context,就能夠經過this.context訪問到這個共同的環境對象。
Redux對Store的封裝好,沒有提供直接修改狀態的功能。雖然組件可以訪問全局惟一的Store,可是不能直接Store中的狀態,克服Store做爲全局對象的缺點。
改進React應用的兩個方法:
Redux兩個最主要的功能:
1.connect
容器組件的工做:
簡言之,一是對內層傻瓜組件的輸入,二是內層傻瓜組件的輸出。
2.Provider
React-Redux要求Store所包含的三個函數的Object:
擁有以上三個函數的對象,才能稱之爲Redux的Store。
React-Redux定義了Provider的componentWillReceiveProps函數,在React的生命週期中,componentWillReceiveProps函數每次渲染時都會被調用。
每一個Redux應用只能有一個Redux Store ,在整個Redux的生命週期中都應該保持Store的惟一性。