【问题标题】:Why does a redux-saga use put method instead of dispatch?为什么 redux-saga 使用 put 方法而不是 dispatch?
【发布时间】:2018-11-03 11:43:41
【问题描述】:

README 文件中的演示示例使用了一个名为 put() 的函数,而不是 worker saga 中的 dispatch()

...

// 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});
   }
}

...

【问题讨论】:

    标签: javascript reactjs react-redux redux-saga


    【解决方案1】:

    Redux-Sagas 基于generator functions。每当您调用其中之一时,它都会被执行,直到到达 yield。除了允许您通过等待 Promise 来执行异步操作之外,这在测试方面还有很多优势。

    本质上,在您进行测试时,这里试图避免模拟。为此,遵循声明性方法。关键是你不分派(也没有真正做任何事情),中间件会。您只需为该中间件提供名为 Effects 的对象。所以,put 将做的是创建一个中间件将“读取”的 Effect 对象。然后,它将派发动作并使用next(result)result 是 Effect 告诉中间件做什么的结果)进入下一个 yield 并获得下一个 Effect强>。你可以阅读更多关于它的信息here

    请记住,与 redux-thunk appear when testing comes in 相比,redux-sagas 的主要优势。 能够仅声明每个 put、call 将返回哪个 Effect... and then just iterating from yield to yield 而不必模拟 API 调用或分派是 redux-sagas 的主要卖点。在你完全理解这个概念之前,你可能需要多阅读和练习一点,但我希望我的解释能解决你的疑问。

    【讨论】:

      猜你喜欢
      • 2017-02-22
      • 2019-06-15
      • 2020-04-29
      • 1970-01-01
      • 2010-10-28
      • 2020-06-10
      • 1970-01-01
      • 1970-01-01
      • 2015-05-03
      相关资源
      最近更新 更多