真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

React總結(jié)篇之三_從Flux到Redux

一、Flux
Redux是Flux思想的另一種實現(xiàn)方式,F(xiàn)lux一族框架(包括Redux)貫徹的最重要的觀點是單向數(shù)據(jù)流;

創(chuàng)新互聯(lián)公司成立于2013年,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務公司,擁有項目做網(wǎng)站、成都網(wǎng)站制作網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元昌寧做網(wǎng)站,已為上家服務,為昌寧各地企業(yè)和個人服務,聯(lián)系電話:18982081108

1.MVC框架的缺陷
MVC是業(yè)界廣泛接受的一種前端應用框架類型,這種框架把應用分為3個部分:

  • Model(模型)負責管理數(shù)據(jù),大部分業(yè)務邏輯也應該放在Model中;
  • View(視圖)負責渲染用戶界面,應該避免在View中涉及業(yè)務邏輯;
  • Controller(控制器)負責接受用戶輸入,根據(jù)用戶輸入調(diào)用對應的Model部分邏輯,把產(chǎn)生的數(shù)據(jù)結(jié)果交給View部分,讓View渲染出必要的輸出。

但是,在實際框架實現(xiàn)中,總是可以允許View和Model直接通信,因此會變得非?;靵y!

2.Flux
2.1 Flux包含4個部分:

  • Dispatcher:處理動作分發(fā),維持store之間的依賴關(guān)系;
  • Store:負責存儲數(shù)據(jù)和處理數(shù)據(jù)相關(guān)邏輯;
  • Action:驅(qū)動Dispatcher的JavaScript對象,代表一個動作的純數(shù)據(jù),action對象必須要有一個名為type的字段(字符串類型);
  • View:視圖部分,負責顯示用戶界面

2.2 Flux的優(yōu)勢與不足
(1)優(yōu)勢:單向數(shù)據(jù)流。在Flux的理念里,如果想改變界面,就必須改變store中的狀態(tài),如果要改變store中的狀態(tài),必須派發(fā)一個action對象。
(2)不足:store之間依賴關(guān)系(如果兩個store之間有依賴關(guān)系,就必須用上Dispatcher的waitFor函數(shù));難以進行服務器端渲染;store混雜了邏輯和狀態(tài)。


二、Redux
1.Redux的基本原則:

  • 唯一數(shù)據(jù)源
  • 保持狀態(tài)只讀
  • 數(shù)據(jù)改變只能通過純函數(shù)完成

1.1 唯一數(shù)據(jù)源:
指應用的狀態(tài)數(shù)據(jù)應該只存儲在唯一的一個store上,所有組件的數(shù)據(jù)源就是這個store上的狀態(tài)。store是一個樹形的對象,每個組件往往只是用樹形對象上的一部分數(shù)據(jù)。要驅(qū)動用戶界面渲染,就要改變應用的狀態(tài),但是改變狀態(tài)的方法不是去修改狀態(tài)上的值,而是創(chuàng)建一個新的狀態(tài)對象返回給Redux,由Redux完成新的狀態(tài)的組裝。

1.2 數(shù)據(jù)改變只能通過純函數(shù)完成:
這個純函數(shù)就是Reducer,在Redux中,每個reducer的函數(shù)簽名如下:
reducer(state,action)
第一個參數(shù)state是當前的狀態(tài),第二個參數(shù)action是接收到的action對象,而reducer要做的事情,就是根據(jù)state和action的值產(chǎn)生一個新的對象返回。reducer只負責計算狀態(tài),不負責存儲狀態(tài)。因為reducer是純函數(shù),函數(shù)的返回結(jié)果必須由參數(shù)state和action決定,而且不產(chǎn)生任何副作用,也不能修改參數(shù)state和action對象。

  1. 容器組件和傻瓜組件
    (1)容器組件:和Redux Store打交道,讀取Store的狀態(tài),用于初始化組件的狀態(tài),同時還要監(jiān)聽Store的狀態(tài)改變;當Store狀態(tài)發(fā)生變化時,需要更新組件狀態(tài),從而驅(qū)動組件重新渲染;當需要更新Store狀態(tài)時,就要派發(fā)action對象。
    (2)傻瓜組件:根據(jù)當前props和state,渲染出用戶界面。這是一個純函數(shù),根據(jù)props產(chǎn)生結(jié)果。

  2. React-Redux庫
    React-Redux兩個最主要的功能:
    (1)connect:連接容器組件和傻瓜組件
    (2)Provider:提供包含store的context

3.1 connect:
export default connect(mapStateToProps,mapDispatchToProps)(Counter)
connect是React-Redux提供的一個方法,它接收兩個參數(shù)mapStateToProps和mapDispatch-ToProps,執(zhí)行結(jié)果依然是一個函數(shù),所以才在后面又加一個圓括號,把connect函數(shù)執(zhí)行的結(jié)果立刻執(zhí)行,這一次參數(shù)是Counter這個傻瓜組件。這里有兩個函數(shù)執(zhí)行,第一次是connect函數(shù)的執(zhí)行,第二次是把connect函數(shù)返回的函數(shù)再次執(zhí)行,最后產(chǎn)生的就是容器組件。
connect函數(shù)作為容器組件,做的事情無外乎兩件事:
(1)把store上的狀態(tài)轉(zhuǎn)換為內(nèi)層傻瓜組件的prop;
(2)把內(nèi)層傻瓜組件中的用戶動作轉(zhuǎn)化為派送給Store的動作,即把內(nèi)層傻瓜組件暴露出來的函數(shù)類型的prop關(guān)聯(lián)上dispatch函數(shù)的調(diào)用,每個prop代表的回調(diào)函數(shù)的主要區(qū)別就是dispatch函數(shù)的參數(shù)不同,這就是mapDispatchToProps函數(shù)做的事情。

3.2 Provider
React-Redux幾乎就是provider。
React-Redux要求store是包含以下3個函數(shù)的object:

  • subscribe
  • dispatch
  • getState

另外,React-Redux定義了provider的componentWillReceiveProps函數(shù),React-Redux在componentWillReceiveProps函數(shù)中會檢查這一次渲染時代表store的prop和上次的是否一樣。如果不一樣,就會告警,這樣做是為了避免多次渲染用了不同的Redux store,每個Redux應用只能有一個Redux store,在整個Redux的生命周期中都應該保持Store的唯一性。


名稱欄目:React總結(jié)篇之三_從Flux到Redux
文章位置:http://weahome.cn/article/gdidch.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部