1. 程式人生 > >redux-saga基本用法

redux-saga基本用法

ops shu rop nbsp 暫停 get tle .com 異步操作

redux-saga是管理redux異步操作的中間件,redux-saga通過創建sagas將所有異步操作邏輯
收集在一個地方集中處理。

sagas采用Generator函數來yield Effects。Generator函數可以暫停執行,再次執行的時候
從上次暫停的地方繼續執行。常見的effect有:fork,call,take,put,cancel
由於使用了generator函數,redux-saga讓你可以用 同步的方式來寫異步代碼
redux-saga啟動的任務可以在任何時候通過手動來取消,也可以把任務和其他的Effects放到race方法裏以自動取消

1. sagas的3種類型

1. root saga

立即啟動的所有sagas的唯一入口

const sagaMiddleware = createSagaMiddleware();
const middlewares = [sagaMiddleware];

const store = createStore(appReducer, applyMiddleware(...middlewares));
sagaMiddleware.run(rootSaga);

2. watcher saga

監聽被dispatch的actions,當接收到action或者知道其被觸發時,調用worker saga執行任務

3. worker saga

執行具體的邏輯處理,如進行異步請求,處理返回結果等

2.redux-saga的執行流程

整個流程:ui組件觸發action創建函數 ---> action創建函數返回一個action ------> action被傳入redux中間件(被 saga等中間件處理) ,產生新的action,傳入reducer-------> reducer把數據傳給ui組件顯示 -----> mapStateToProps ------> ui組件顯示

3.常見effect的用法

1. call 異步阻塞調用
2. fork 異步非阻塞調用,無阻塞的執行fn,執行fn時,不會暫停Generator
3. put 相當於dispatch,分發一個action
4. select 相當於getState,用於獲取store中相應部分的state
5. take 監聽action,暫停Generator,匹配的action被發起時,恢復執行。take結合fork,可以實現takeEvery和takeLatest的效果
6. takeEvery 監聽action,每監聽到一個action,就執行一次操作
7. takeLatest 監聽action,監聽到多個action,只執行最近的一次
8. cancel 指示 middleware 取消之前的 fork 任務,cancel 是一個無阻塞 Effect。也就是說,Generator 將在取消異常被拋出後立即恢復
9. race 競速執行多個任務
10. throttle 節流

參考:https://www.jianshu.com/p/e84493c7af35
參考:https://www.jianshu.com/p/6f96bdaaea22

redux-saga基本用法