怎樣理順react,flux,redux這些概念的關係,開發中有必要使用它們嗎

時間 2021-05-13 02:47:40

1樓:網易數帆

上面的答案很詳細了,這裡通過一張圖和簡單的文本來理順一下這些概念之間的關係。

Facebook官方提出了FLUX思想管理資料流,同時也給出了自己的實現來管理React應用。在這之後github上也湧現了一批關於實現FLUX的框架,其中包括了redux。而和其它的FLUX相比redux更為簡單,Redux只有唯一的state樹,不管專案變的有多複雜,開發者只需要維護乙個state樹就可以了。

讓我們簡單的了解一下redux的實現,如下:

Redux近似於flux,秉承了flux單向資料流的概念。Redux的區別在於redux將多個store變成了乙個大的store集合,同時將dispatch合併到了Store中,並引入了reducer及中介軟體。Store在繫結actions函式之後,actions呼叫返回資料經由中介軟體交給reducer,經reducer處理後更改store中對應的資料(該資料的命名按照傳入combineReducers中的物件屬性名進行命名),而資料更改之後store將變化分發給所有註冊監聽的物件。

Redux並不一定要配合react使用,但是react作為一種view層的框架卻很適合於使用redux作為架構。借助redux與react-redux模組,我們能很容易的將react與redux結合在一起。

以上答案來自我廠牟金濤老師的博文《

如何用redux架構react專案

》網易雲免費體驗館,0成本體驗20+款雲產品!

2樓:RMC Yang

自己在工作過程中做了乙個總結,用很直觀的方式解釋下redux和react的關係,適用於真正開發當中。Flux在此就不涉及了,Flux本身是一套單項資料流的設計框架,redux是其的一種具體實現罷了。redux和react總一起出現是因為如果單單使用react,它僅僅是個view framework,不足以提供足夠的前端管理和使用功能。

而redux的引入就好像react+ MC(model controller) 一樣,賦予了react完整的生態系統。當然redux不是基於MVC的。簡單說,redux + react換了個更直觀的法子實現了MVC能提供的資料管理功能。

要理解下圖,最核心要理解幾點:

1. React本身是基於component的View

2. Redux是flux的乙個實現,其核心有乙個中心store用於管理全域性state以及處理操作

3. redux和react本身並沒有任何關係。redux也可以用在MVC框架上,flux的理念可以用在任何網頁或移動前端上。

比如iOS swift也有ReSwift的框架,在iOS的MVC之上實現了單向資料流。

4. redux和react雖然本身沒有關係,但是他們各自為戰都戰鬥力不足,合在一起確是能量值爆表,所以大部分時候,兩個東西會通過乙個叫做react-redux的庫連線起來。這個庫最核心的乙個fucntion叫做connect。

5. redux的核心,是action-store-reducer,action用於表示乙個操作,store用於儲存狀態,reducer用於接收action並更新store中的狀態。

具體分析上圖:

我們從乙個簡單的例子入手,比如,你有乙個頁面簡單的呈現一下從後端得到的所有商品資料列表。首先,你load這個頁面。react有componentDidMount callback,可以直接呼叫需要的函式。

在此,我們呼叫乙個函式用來從後端獲取所有的商品。所以,

1. 在上圖中的第1步,react component2 發起了乙個function call.

2. 第二步,這個function的內部實現,是dispatch乙個action。action是redux的核心概念,用來代表我需要對store state做一些操作。

這個action,比如我們叫他'GET_PRODUCTS_INDEX'被store.dispatch發到了store。

3. 第三步,store收到這個「GET_PRODUCTS_INDEX」 action,立馬把這個action發布給了訂閱的reducer,reducer是可以chain在一起的。reducer內部會去接收這個action。

同時,多個reducer都可以同時接收這個action。

4. 第四步,假設只有reducer1想要接收這個action,他讀取action所攜帶的payload(這裡沒有payload), 然後更新store當中相應的state。一般對於backend call,都會有乙個表示正在call的狀態,假設為isCalling。

在此就需要把isCalling set成true。

5. state預先已經和react component的props做了繫結,就是通過react-redux庫裡面的定義mapStatesToProps實現的。所以store state一旦被更新,相應的props也就被更新。

而props更新,會導致相關的UI做出re-render,導致UI變化。在這裡,因為isCalling變成了TRUE,我們可以顯示出乙個loading的icon,代表正在載入資料。

這就是乙個完整的redux和react合作的資料流的閉環。當然有人要問了,你這個GET_PRODUCTS_INDEX action怎麼最終也沒有拿到後端的資料啊?就僅僅是讓loading icon出現嗎?

出乎你的意料,確實是的。從嚴格意義上講的乙個redux 資料流,確實已經完了。那麼我們到底是需要在什麼地方真正的去後端取資料呢?

實現這個需要一些別的輔助。比如,可以用'rxjs/Rx'做出乙個EPIC的概念來。其核心就是,除了reducer可以監聽action之外,這個epic也可以監聽action,一旦發現GET_PRODUCTS_INDEX action 被dispatch了,它立馬用ajax的形式向後端發起請求。

一旦請求返回,他用store dispatch乙個新的action,比如叫GET_PRODUCTS_INDEX_SUCCESS。這個action攜帶payload,而這個payload就是返回的商品資料。

嘿熟悉嗎,沒錯,至此,新的乙個redux資料流又從發起乙個action dispatch開始了!重新走上面的1-5步就可以把相應的資料都給顯示出來啦。

怎麼理順組織結構?

伯特諮詢Nathan 伯特諮詢是人力資源管理領域,擁有二十年的實戰經驗,為國內外眾多知名企業 上市公司提供過人力資源戰略諮詢服務。我們總結下來,理順組織結構可以分為4步走。第一,在總部和分支結構間選擇合適的管理模式。首先理順其中的授權方式和集分權關係。授權模式主要有三種,按照集權程度從弱到強排序依次...

怎樣才能提高臨場口頭表達和理順思路的能力?

宅男府邸 從幾十年各大領導發言稿中總結出的公式 感謝 回顧 願景 祝福,其中感謝和回顧不分先後。普通人的臨時感言,這三板斧就足夠了!每一次臨時感言,都是生活中的真實演出。從學生時代的聯誼 畢業晚會,到工作後的年會 團建活動,想起過去那些手足無措 詞不達意的 表演 不由得就是老臉一紅。你我可以不做引人...

如何重新理順與父母的關係 減少原生家庭的負面影響?

不吉波普 1 接納自己的遭遇 承認我們的童年發生了不幸,承認原生家庭有它自己的侷限性,承認我們對原生家庭的恨 愛 憤怒 羞愧 傷痛 挫敗等情感,是降低原生家庭對我們負面影響的第一步。人不可能自欺欺人地過一輩子,正視過去,聆聽自己內心的聲音,才能幫助我們回歸現在和展望未來。2 學會自己撫育自己 既然我...