React狀態(tài)管理:react-redux和redux-saga(適合由vue轉(zhuǎn)到react的同學(xué))

注意:本文不會把所有知識點(diǎn)都寫一遍剪个,并不適合純新手閱讀

首先Redux是一種狀態(tài)管理方案转质,本身和react并沒有什么聯(lián)系临庇,redux也可以結(jié)合其他框架來用锭汛。
react-redux是基于react的一種狀態(tài)管理實(shí)現(xiàn),他不像vuex那樣直接內(nèi)置在create-react-app里管呵,需要自己去安裝梳毙。

react-redux有三個(gè)重要概念,分別是:store捐下,action账锹,reducer萌业。
1.store。store就是存儲全局?jǐn)?shù)據(jù)狀態(tài)的倉庫奸柬。像這樣:

const initState = {
    xxx1: null,
    xxx2: null,
};

需要注意的是生年,state是只讀的,意味著我們不能initState.xxx1 = "233"這樣去修改store里的數(shù)據(jù)廓奕。
其實(shí)抱婉,工作的項(xiàng)目里,倉庫并不是放在store.js里桌粉,store.js里一般是做一些創(chuàng)建store蒸绩,注冊saga的操作,state一般是放在具體模塊的reducer.js里(一個(gè)模塊應(yīng)該有action.js铃肯,reducer.js患亿,saga.js三個(gè)文件)

2.action。
上文說了押逼,state是只讀的步藕,所以我們只能通過派發(fā)action的方式修改store里的數(shù)據(jù)。
派發(fā)action這個(gè)說法我一直覺得很拗口挑格,其實(shí)就是dispatch action的直譯咙冗。
action包含兩部分:type和payload。
type其實(shí)就是action的標(biāo)識恕齐,一個(gè)常量的字符串乞娄,用來說明這個(gè)action是干嘛的,比如說type:"GET_USERNAME"显歧,說明這個(gè)action是用來獲取username的仪或,payload就是參數(shù)了,就是調(diào)用api需要的參數(shù)士骤。
注意:action是派發(fā)給store的范删。

3.reducer。
reducer接收一個(gè)state和action拷肌,返回一個(gè)state到旦。
store在接收到action之后會把a(bǔ)ction和當(dāng)前的state傳給reducer,然后reducer根據(jù)action的type去判斷執(zhí)行什么樣的操作巨缘,然后返回一個(gè)新的state給store添忘,比如:return {...state,name:"接口獲取到的username"}

工作流程圖如下:

react-redux.png

這個(gè)流程還是蠻好懂的若锁,接下來我們來說下reducer要注意的地方搁骑。(這里牽扯到我們?yōu)槭裁催€要用redux-saga)
reducer必須是一個(gè)純函數(shù)
純函數(shù)是指一個(gè)函數(shù)的返回結(jié)果只依賴于該函數(shù)傳入的參數(shù),而不能產(chǎn)生副作用
副作用是指異步操作,DOM操作等...
好的仲器,沒明白是吧煤率,說人話,reducer里是不能進(jìn)行異步請求的乏冀!我們在工作中肯定會調(diào)用接口異步獲取數(shù)據(jù)的蝶糯,這樣的話只靠react-redux是無法滿足我們的需求的,而redux-saga就是來解決這個(gè)問題的辆沦。
如果你熟悉vuex昼捍,就知道vuex里有mutation和action,其中mutation提交更新數(shù)據(jù)的方法众辨,只能是同步的端三,而action中就可以包含異步操作了,而且action提交的是mutation鹃彻。
mutation和action的關(guān)系就近似于reducer和saga的關(guān)系:saga里調(diào)用接口獲取到數(shù)據(jù)之后再提交action給reducer,最終返回新的state給store的還是reducer妻献。

saga包含watch-saga函數(shù)和worker-saga函數(shù)蛛株,watch-saga用于監(jiān)聽系統(tǒng)派發(fā)出來的action,watch-saga一旦監(jiān)聽到了某個(gè)action就執(zhí)行對應(yīng)的worker-saga育拨,worker-saga里進(jìn)行異步操作(調(diào)用接口請求數(shù)據(jù)等)谨履,拿到數(shù)據(jù)之后派發(fā)第二個(gè)action給store,store再把state和action給reducer(至此就和無saga時(shí)的流程一樣了)熬丧。
加入了saga笋粟,工作流程發(fā)生了變化:
我們注意到工作流中的action有兩個(gè),可以理解為第一個(gè)action是給watch-saga的析蝴,第二個(gè)action時(shí)異步操作完之后worker-saga給store的害捕。

加入saga后的工作流程如下:

redux-saga.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市闷畸,隨后出現(xiàn)的幾起案子尝盼,更是在濱河造成了極大的恐慌,老刑警劉巖佑菩,帶你破解...
    沈念sama閱讀 221,430評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件盾沫,死亡現(xiàn)場離奇詭異,居然都是意外死亡殿漠,警方通過查閱死者的電腦和手機(jī)赴精,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,406評論 3 398
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來绞幌,“玉大人蕾哟,你說我怎么就攤上這事。” “怎么了渐苏?”我有些...
    開封第一講書人閱讀 167,834評論 0 360
  • 文/不壞的土叔 我叫張陵掀潮,是天一觀的道長。 經(jīng)常有香客問我琼富,道長仪吧,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,543評論 1 296
  • 正文 為了忘掉前任鞠眉,我火速辦了婚禮薯鼠,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘械蹋。我一直安慰自己出皇,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,547評論 6 397
  • 文/花漫 我一把揭開白布哗戈。 她就那樣靜靜地躺著郊艘,像睡著了一般。 火紅的嫁衣襯著肌膚如雪唯咬。 梳的紋絲不亂的頭發(fā)上纱注,一...
    開封第一講書人閱讀 52,196評論 1 308
  • 那天,我揣著相機(jī)與錄音胆胰,去河邊找鬼狞贱。 笑死,一個(gè)胖子當(dāng)著我的面吹牛蜀涨,可吹牛的內(nèi)容都是我干的瞎嬉。 我是一名探鬼主播,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼厚柳,長吁一口氣:“原來是場噩夢啊……” “哼氧枣!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起草娜,我...
    開封第一講書人閱讀 39,671評論 0 276
  • 序言:老撾萬榮一對情侶失蹤挑胸,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后宰闰,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體茬贵,經(jīng)...
    沈念sama閱讀 46,221評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,303評論 3 340
  • 正文 我和宋清朗相戀三年移袍,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了解藻。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,444評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡葡盗,死狀恐怖螟左,靈堂內(nèi)的尸體忽然破棺而出啡浊,到底是詐尸還是另有隱情,我是刑警寧澤胶背,帶...
    沈念sama閱讀 36,134評論 5 350
  • 正文 年R本政府宣布巷嚣,位于F島的核電站,受9級特大地震影響钳吟,放射性物質(zhì)發(fā)生泄漏廷粒。R本人自食惡果不足惜红且,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,810評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望暇番。 院中可真熱鬧,春花似錦壁酬、人聲如沸次酌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,285評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽和措。三九已至蜕煌,卻和暖如春诬留,著一層夾襖步出監(jiān)牢的瞬間斜纪,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,399評論 1 272
  • 我被黑心中介騙來泰國打工文兑, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留盒刚,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,837評論 3 376
  • 正文 我出身青樓绿贞,卻偏偏與公主長得像,于是被迫代替她去往敵國和親籍铁。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,455評論 2 359

推薦閱讀更多精彩內(nèi)容