redux-saga基本用法

看風景就發表於2018-08-20

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

相關文章