Redux-saga

前言

在閱讀此文章前捆愁,需要你會ES6的Generator函數(shù)获搏,另外redux中間件的原理也希望你能初步了解错负。

為什么會有redux-saga

中間件用過redux-thunk业岁,也用過redux-promise-middleware项贺,原理都很簡單君躺。

thunk就是簡單的action作為函數(shù),在action進行異步操作开缎,發(fā)出新的action棕叫。
而promise只是在action中的payload作為一個promise,中間件內(nèi)部進行處理之后奕删,發(fā)出新的action俺泣。

這兩個簡單也容易理解,但是當(dāng)業(yè)務(wù)邏輯多且復(fù)雜的時候會發(fā)生什么情況呢急侥?我們的action越來越復(fù)雜砌滞,payload越來越長,當(dāng)然我們可以分離開來單獨建立文件去處理邏輯坏怪,但是實質(zhì)上還是對redux的action和reducer進行了污染贝润,讓它們變得不純粹了,action就應(yīng)該作為一個信號铝宵,而不是處理邏輯打掘,reducer里面處理要好一些,但是同樣會生出幾個多余的action類型進行處理鹏秋,而且也只能是promise尊蚁,不能做復(fù)雜的業(yè)務(wù)處理。

redux-saga將進行異步處理的邏輯剝離出來侣夷,單獨執(zhí)行横朋,利用generator實現(xiàn)異步處理。
一個計數(shù)器示例

redux-saga

  1. saga任務(wù)百拓,新建文件處理業(yè)務(wù)邏輯琴锭,使用generator晰甚,redux-saga提供很多函數(shù)方便處理,put發(fā)出action决帖,takeEvery監(jiān)聽action厕九,takeLatest只執(zhí)行最后一次action,call執(zhí)行函數(shù)地回,并且可以獲取promise的數(shù)據(jù)
import {delay} from 'redux-saga'
import {put, takeEvery, all, call} from 'redux-saga/effects'

export function* hello() {
  console.log('hello saga!')
}
const ajax = () => new Promise(resolve=>setTimeout(()=>resolve(99), 4000))
export function* incrementAsync() {
  let data = yield call(ajax)
  yield put({type: 'INCREMENT'})
}

export function* watchIncrementAsync() {
  yield takeEvery('INCREMENT', ()=>console.log('+1'))
  yield takeEvery('INCREMENT_ASYNC', incrementAsync)
}

export default function* rootSaga() {
  yield all([
    hello(),
    watchIncrementAsync()
  ])
}
  1. 啟動generator
const sagaMiddleware = createSagaMiddleware()
const store = createStore(
  reducer,
  applyMiddleware(sagaMiddleware)
)
sagaMiddleware.run(rootSaga)

后話

antd的dva是對redux-saga的一個很好的實現(xiàn)扁远。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市刻像,隨后出現(xiàn)的幾起案子畅买,更是在濱河造成了極大的恐慌,老刑警劉巖细睡,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件皮获,死亡現(xiàn)場離奇詭異,居然都是意外死亡纹冤,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進店門购公,熙熙樓的掌柜王于貴愁眉苦臉地迎上來萌京,“玉大人,你說我怎么就攤上這事宏浩≈校” “怎么了?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵比庄,是天一觀的道長求妹。 經(jīng)常有香客問我,道長佳窑,這世上最難降的妖魔是什么制恍? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮神凑,結(jié)果婚禮上净神,老公的妹妹穿的比我還像新娘。我一直安慰自己溉委,他們只是感情好鹃唯,可當(dāng)我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著瓣喊,像睡著了一般坡慌。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上藻三,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天洪橘,我揣著相機與錄音跪者,去河邊找鬼。 笑死梨树,一個胖子當(dāng)著我的面吹牛坑夯,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播抡四,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼柜蜈,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了指巡?” 一聲冷哼從身側(cè)響起淑履,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎藻雪,沒想到半個月后秘噪,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡勉耀,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年指煎,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片便斥。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡至壤,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出枢纠,到底是詐尸還是另有隱情像街,我是刑警寧澤,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布晋渺,位于F島的核電站镰绎,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏木西。R本人自食惡果不足惜畴栖,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望户魏。 院中可真熱鬧驶臊,春花似錦、人聲如沸叼丑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鸠信。三九已至纵寝,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背爽茴。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工葬凳, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人室奏。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓火焰,卻偏偏與公主長得像,于是被迫代替她去往敵國和親胧沫。 傳聞我的和親對象是個殘疾皇子昌简,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,465評論 2 348

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

  • 1. redux-thunk處理副作用的缺點 1.1 redux的副作用處理 redux中的數(shù)據(jù)流大致是: UI—...
    Grace_ji閱讀 3,537評論 0 14
  • 原文地址在我的博客, 轉(zhuǎn)載請注明出處,謝謝绒怨! 概述 本文介紹了我對 Redux 狀態(tài)管理的思想纯赎、原理、架構(gòu)方法的認(rèn)...
    莫凡_Tcg閱讀 6,801評論 0 15
  • 讓我驚訝的是南蹂,redux-saga 的作者竟然是一名金融出身的在一家房地產(chǎn)公司工作的員工(讓我想到了阮老師犬金。。六剥。)...
    一個笑點低的妹紙閱讀 58,082評論 13 87
  • 本文用以記錄從調(diào)研Redux Saga晚顷,到應(yīng)用到項目中的一些收獲。 什么是Redux Saga 官網(wǎng)解釋 來自:h...
    FrancisW閱讀 16,971評論 14 34
  • Redux-saga 概述 redux-saga是一個用于管理redux應(yīng)用異步操作的中間件疗疟,redux-saga...
    woow_wu7閱讀 51,668評論 11 41