Redux-saga做了什么事情?跟redux-thunk区别在哪里?

#1

一直听一些人说redux-saga很好,但是好处是什么呢?看了下官方的一个示例,我感觉可能是多了一个对异步事件的生命周期的控制,要是你对这个插件很了解,不妨说说你的看法。

import { call, put, takeEvery, takeLatest } from 'redux-saga/effects'
import Api from '...'

 // worker Saga: will be fired on USER_FETCH_REQUESTED actions
function* fetchUser(action) {
 try {
    const user = yield call(Api.fetchUser, action.payload.userId);
    yield put({type: "USER_FETCH_SUCCEEDED", user: user});
 } catch (e) {
    yield put({type: "USER_FETCH_FAILED", message: e.message});
 }
}

/*
  Starts fetchUser on each dispatched `USER_FETCH_REQUESTED` action.
  Allows concurrent fetches of user.
*/
function* mySaga() {
  yield takeEvery("USER_FETCH_REQUESTED", fetchUser);
}

/*
  Alternatively you may use takeLatest.

  Does not allow concurrent fetches of user. If "USER_FETCH_REQUESTED" gets
  dispatched while a fetch is already pending, that pending fetch is cancelled
  and only the latest one will be run.
*/
function* mySaga() {
  yield takeLatest("USER_FETCH_REQUESTED", fetchUser);
}

export default mySaga;

如果说redux-thunk还有回调地狱的问题,那么为什么不从自己写的逻辑上去做一些优化呢?

#2

我个人感觉redux-thunk结合asnyc await已经足够了,saga似乎还增加了项目的复杂度:cry:

#3

我想问下asnyc await兼容性怎么样

#4

使用babel工具不需要考虑兼容性了

#5

哦哦。好的!