问题标签 [redux-saga]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
5158 浏览

reactjs - 我可以使用 redux-saga 的 es6 生成器作为 websockets 或事件源的 onmessage 监听器吗?

我正在尝试让 redux-saga 与onmessage侦听器一起工作。我不知道为什么我所拥有的不起作用。

我有以下设置。

当调用APP_LOADED调度动作时,打开流并调用 onMessage 侦听器,因为从服务器接收到数据,但是在调用生成器getTransactions时调度动作没有任何运气。yield put(transactions(txs))foo

谁能告诉我我做错了什么?

0 投票
9 回答
130866 浏览

javascript - 将 redux-saga 与 ES6 生成器结合使用与 redux-thunk 与 ES2017 async/await 结合使用的优缺点

现在有很多关于 redux 镇最新的小子redux-saga/redux-saga 的讨论。它使用生成器函数来监听/调度动作。

在开始讨论之前,我想知道使用async/awaitredux-saga的方法而不是下面的方法的优缺点。redux-thunk

一个组件可能看起来像这样,像往常一样调度操作。

然后我的动作看起来像这样:


0 投票
1 回答
9917 浏览

javascript - 监听一个 redux 动作

我想创建一个可重用的 redux 表模块,它将存储和更新页码、显示的总页数等,我可以在所有页面之间共享。

但是,我需要更新操作来触发刷新数据操作,该操作将根据页面到达不同的端点。

因此,也许某些特定于页面的内容会监听“RefreshData”操作,然后触发另一个操作。实现这一目标的最佳方法是什么?我目前正在为我的中间件使用 redux-thunk,但一直在寻找 redux-saga。

实现这一目标的最佳方法是什么?

** 澄清 **

我在多个页面/项目上有表格,我想尽量减少代码重复。我在想我可以制作一个可放置的 redux 模块(动作+reducer),然后单独指定 REFRESH_DATA 动作的处理程序,所以我不需要在这个文件中放置开关。我认为使用 redux-saga 我可以监听 REFRESH_DATA 动作并根据当前页面进行切换?或者有什么更好的建议。

0 投票
1 回答
198 浏览

redux - redux-saga 是否在 redux 存储中存储任何状态?

我有兴趣了解更多关于 redux-saga 的信息,我很好奇它是否可以帮助解决我想解决的问题。通常,对于异步 API 调用,围绕正在运行的任务的状态有各种常见模式,例如它是否失败是否仍在运行是否成功完成。. 我一直在将这些作为分派的单独操作实现,但对于每个 API 调用,我发现我至少有 3 个相应的操作,我必须分别命名、管理和分派。为了缓解这种情况,我希望实现自己的抽象,但首先想验证 redux-saga 是否包含一些标准方法来跟踪 API 调用中的这些状态值,我可以使用这些方法而不是重新发明轮子。

也许还有其他库可能会有所帮助,但因为我对 redux-saga 感兴趣的其他原因,我主要想知道它是否提供了我所追求的东西。

0 投票
1 回答
369 浏览

redux - redux-saga 一些快速触发的相同动作错过了

您好,我在其中一个 React 组件中有一个 onChange 回调,它通过这样的地图调用多次分派一个动作:

我有一个像这样的“项目”的传奇:

换句话说,我预计每当 ITEMS_UPDATE_START 操作被调度时,它会派生一个新的 updateItemDbCrud 并继续执行一些 API 工作,但我注意到只有调度序列中的第一个通过。我用错了叉子吗?

谢谢!

0 投票
5 回答
11894 浏览

javascript - 如何将发出的事件事件绑定到 redux-saga?

我正在尝试使用redux-sagaPouchDB中的事件连接到我的React.js应用程序,但我正在努力弄清楚如何将 PouchDB 发出的事件连接到我的 Saga。由于该事件使用回调函数(并且我无法将其传递给生成器),因此我无法yield put()在回调内部使用,它在 ES2015 编译后(使用 Webpack)会给出奇怪的错误。

所以这就是我想要完成的,不起作用的部分是 inside replication.on('change' (info) => {})

0 投票
3 回答
9815 浏览

javascript - 如何使用 Redux Saga 测试 API 请求失败?

我正在尝试测试我的传奇可能遵循的所有场景,但我无法实现我想要的行为。这很简单,我有一个 HTTP 请求(登录),我想通过模拟我的 API 方法来测试成功和失败的案例。

但是,看起来它call effect并没有触发我的 api 函数,我还没有真正了解它是如何工作的,但我猜中间件负责调用该函数,因为我不去商店我的测试,我无法得到结果。

所以我的问题是,当您需要在异步调用旁边调度不同的操作(通常是成功或失败)时,如何测试您的传奇?

我找了一个例子,我发现 sagas 成功和失败,但失败案例从未测试过,例如在购物车示例

SAGA.JS

测试.JS

0 投票
1 回答
1547 浏览

reactjs - API 请求的 redux 传奇有意义吗?

我想知道通用请求传奇是否有意义?

它将采取REQUEST包含所有信息(如标头、url、数据)的操作,并将其与自己的标头和基本 URL 合并。然后它将fetch请求,然后put(REQUEST_SUCCEEDED, json)在存储中使用 json 有效负载。

据我了解,这一次只允许一个请求,所以与其调用 API fetch 函数,afork会更好吗?

saga 还可以access_token在响应标头中遇到 API 时负责管理 API,并将其保存以供所有后续请求使用。

0 投票
2 回答
915 浏览

reactjs - 在 redux-saga 或 reducer 中处理下载的项目规范化?

我从删除 API 获得的数据不是我的应用可以处理的格式。我的传奇下载数据。

谁应该处理标准化?

使用规范化数据发送成功操作之前的传奇本身?

或者路由器应该在建立新状态之前标准化日期吗?

编辑我选择在传奇中规范化并保持减速器清洁。它只是用新的活动替换了activitiesUpdated它。

减速机

这些是传奇:

当您想到updateActivities传奇中的双包装 while 循环时?

这也是正确的吗

yield take([REFRESH_ACTIVITIES, LOGOUT])

只是一个捷径

yield race[take(REFRESH_ACTIVITIES), take(LOGOUT)]

0 投票
0 回答
248 浏览

cucumber - 如何在黄瓜功能中存根/模拟来自 redux-saga 的 api 请求?

我有一个定期产生 call(fetch, url) 的 redux-saga

我想要一个黄瓜功能来测试这个应用程序的行为。不是传奇本身。我已经有这样的测试了。

我无法理解如何模拟 fetch 操作,特别是因为并行 sagas 也在应用程序中运行。