问题标签 [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 回答
241 浏览

testing - 为 redux-saga 编写测试

我正在测试以下传奇功能

这些是我对第 3 次和第 4 次产量的测试:

实际返回未定义,即 gen.next(response,channel,date).value 返回未定义。你能告诉我测试这些的正确方法吗?谢谢

0 投票
3 回答
4305 浏览

javascript - 在 if 语句中测试 redux-saga 并使用真实值

如何在 if 语句或 try/catch 中测试函数?例如,

我需要输入一个实际存在于数据库中的真实通道名称,以便它为随后执行的收益返回有效响应,否则将引发错误。另外,我会得到一个错误信息,cannot read property json of undefined,所以由于这个错误信息,无法达到之后的 yield。所以我的第一个问题是 'if(response.ok)' 但即使我删除它,yield response.json() 也会返回一个错误,而且之后的 yield 也不会被执行。如果有人能告诉我如何测试这些,将不胜感激。

0 投票
2 回答
10791 浏览

redux-saga - 启动 rootSaga 的惯用方式是什么?

redux-saga 项目已经存在了很长时间,但是这个库仍然有很多令人困惑的地方。其中之一是:如何启动你的 rootSaga。例如,在初学者教程中, rootSaga 是通过生成一个 saga 数组来启动的。像这样

然而,在using saga helpers部分,rootSaga 由两个分叉的 saga 组成。像这样:

在 redux-saga repo 的异步示例中使用了相同的启动 rootSaga 的方式。但是,如果您查看真实世界和购物卡示例,您会看到那里的 rootSagas 产生了一系列分叉的 saga。像这样:

此外,如果您阅读有关 redux-saga 问题的一些讨论,您会看到有些人建议使用 spawn 而不是 fork 用于 rootSaga 以防止您的应用程序在您的一个分叉 saga 因某些未处理的异常而被取消时完全崩溃。

那么,哪种方式是启动 rootSaga 的最正确方式呢?现有的有什么区别?

0 投票
1 回答
346 浏览

javascript - redux-sagas 生成器在回调中失败

我正在尝试使用 sagas 中间件通过 firebase 设置 redux 注册和身份验证流程。但是我得到:

有点通用,但是围绕它移动那行代码似乎 yield 特别不喜欢在回调中。但是,我看不到任何特别禁止这样做的地方。有没有更好的方法来做到这一点?这是传奇生成器。

这是firebase注册功能:

编辑:最初我认为这是由 if/else 引起的,但回调似乎是真正的罪魁祸首

0 投票
1 回答
234 浏览

lifecycle - 组件生命周期的 Redux Saga 行为

这是一个普遍的问题。我有一个 redux 传奇产生的调用,它每 x 分钟更新一次存储,并显示存储在 redux 开发工具中得到适当的更新。在我的组件的渲染方法中,如果我在数据之前单击,我将获得一个微调器,如果我在组件渲染之后单击;但是,在组件类中,生命周期“componentWillUpdate”或“componentWillReceiveProps”将redux store中的连接部分显示为在任一方法中未定义,但渲染器能够传递正确的道具;怎么回事?我将返回文档,但这似乎很奇怪。

在此处输入图像描述

0 投票
2 回答
843 浏览

reactjs - 将观察者传递给 redux-sagas

我正在尝试利用 redux-sagas 框架中可观察到的 firebase,但如果没有 hack,我很难做到这一点。我正在尝试使用 firebase 的“onAuthStateChange”功能,如此处所示

本质上,观察者在用户登录或退出时执行

在我的 firebase 实用程序文件中,我的方法如下所示:

然后在我的传奇中,目前,我只是在观察者观察到某些东西时尝试登录控制台:

由于未定义“回调”而失败。我本质上是在试图让观察者传递给 sagas,但它不起作用。我的解决方法是将完整的 firebase auth 对象传递给我的登录/注销 saga,然后在其中创建观察者。这有效,但似乎是一个黑客。任何帮助将不胜感激。

0 投票
1 回答
885 浏览

redux - 构建 redux、redux-saga 和 normalizr

所以我想使用这三种技术。我的想法是在 normalizr 的帮助下拥有一个处理我所有实体的减速器。

redux-saga 将监听ENTITIES_REQUESTED动作,运行一个请求实体的 saga,并执行一个ENTITIES_RECEIVED动作,该动作将由调用 normalizr 并将实体存储在entities切片中的 reducer 处理。

为了删除一个实体,有两件事必须发生:必须从状态中删除实体,并且必须发生副作用,它将从服务器中删除实体(旁白:我知道有些人会声称从状态中删除也是一个副作用,但我认为 redux-saga 不适用于这个概念)。

所以我可以有一个ENTITY_REMOVED动作,它将从状态中删除实体,以及一个监听它的 saga,它将处理 api 调用。

现在假设我有一个表,该表具有批量删除功能。该表由接受 action 的减速器“供电” DATA_OPTIONS_SET。reducer 会更新当前页面、过滤器等内容。还会有一个 saga 来自监听此内容并调用 API 以返回新数据集。

我想有一个批量删除功能,它在高级别删除所有实体,完成后刷新表。

如果我遍历要删除的实体并调度一个ENTITY_REMOVED动作,我将无法知道这些删除何时完成,以便我可以刷新表。

如果我手动调用删除实体的 saga,ENTITY_REMOVED将永远不会被调度,因此实体不会从商店中删除。

这是否意味着我的架构不正确并且我在某个地方转错了方向?

0 投票
1 回答
149 浏览

javascript - 将变量设置为回调监听器的返回

我正在使用 firebase 在我的应用程序中处理身份验证。Firebase 有一个监听器,只要身份验证状态发生变化,它就会执行回调。我在firebase utils文件中有这个:

当用户登录/注销时,回调执行。我正在尝试在 redux-saga 中处理这个观察者,只要 firebase 告诉我状态发生变化,就会向我的 reducer 发送一个事件。我遇到的问题是我无法确定如何控制该观察者的动态返回值。现在我正在这样做:

我已经确认 if/else 条件有效(只是在状态更改时登录到控制台),但如果我尝试使用 yield 会出现错误。这要么是一个错误,要么是我违反了我不清楚的规则。还有其他方法可以设置吗?从最佳实践的角度来看,这似乎确实需要由 redux-sagas 处理。

0 投票
3 回答
5025 浏览

javascript - Redux-Saga 为单个操作运行两次

我有一个传奇来处理类似的请求。用户单击按钮来切换照片的喜欢状态。

saga 监听 type 的动作SUBMIT_LIKE。我的问题是submitLikeSaga每个SUBMIT_LIKE动作运行两次。例如,在 api-error 情况下,一个SUBMIT_LIKE动作触发两个 api 调用和四个RECEIVE_LIKE动作。

(如果有帮助,请使用react-boilerplate 。)

编辑:添加中间件并查看代码。

ProfileGrid.js

动作图标.js

store.js

asyncInjectors.js

0 投票
1 回答
2188 浏览

reactjs - 如何在saga中成功调用api后更改url

用例:

用户订阅后,我想导航到另一个页面,通知用户验证他们的电子邮件。

有没有办法导航到成功页面,即/subscribe-success一旦我收到来自服务器的成功响应?