javascript – 为什么redux-saga使用put方法而不是dispatch?

README文件中的演示示例在worker saga中使用名为put()的函数而不是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});
   }
}

...

解决方法

Redux-Sagas基于 generator functions.每当你调用其中一个时,它就会被执行直到达到收益.除了允许您通过等待承诺执行异步操作之外,这在例如测试方面具有许多优点.

从根本上说,模拟是你在测试时试图避免的.为此,遵循声明式方法.关键是你没有派遣(也没有真正做任何事),中间件就是这样.您只为此中间件提供名为Effects的对象.因此,put将做的是创建一个中间件将“读取”的Effect对象.然后,它将调度该动作并使用next(结果)(结果是效果告诉中间件要做的任何结果)转到下一个yield并获得下一个Effect.你可以阅读更多关于它here.

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

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...