问题标签 [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.
testing - 为 redux-saga 编写测试
我正在测试以下传奇功能
这些是我对第 3 次和第 4 次产量的测试:
实际返回未定义,即 gen.next(response,channel,date).value 返回未定义。你能告诉我测试这些的正确方法吗?谢谢
javascript - 在 if 语句中测试 redux-saga 并使用真实值
如何在 if 语句或 try/catch 中测试函数?例如,
我需要输入一个实际存在于数据库中的真实通道名称,以便它为随后执行的收益返回有效响应,否则将引发错误。另外,我会得到一个错误信息,cannot read property json of undefined,所以由于这个错误信息,无法达到之后的 yield。所以我的第一个问题是 'if(response.ok)' 但即使我删除它,yield response.json() 也会返回一个错误,而且之后的 yield 也不会被执行。如果有人能告诉我如何测试这些,将不胜感激。
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 的最正确方式呢?现有的有什么区别?
javascript - redux-sagas 生成器在回调中失败
我正在尝试使用 sagas 中间件通过 firebase 设置 redux 注册和身份验证流程。但是我得到:
有点通用,但是围绕它移动那行代码似乎 yield 特别不喜欢在回调中。但是,我看不到任何特别禁止这样做的地方。有没有更好的方法来做到这一点?这是传奇生成器。
这是firebase注册功能:
编辑:最初我认为这是由 if/else 引起的,但回调似乎是真正的罪魁祸首
reactjs - 将观察者传递给 redux-sagas
我正在尝试利用 redux-sagas 框架中可观察到的 firebase,但如果没有 hack,我很难做到这一点。我正在尝试使用 firebase 的“onAuthStateChange”功能,如此处所示
本质上,观察者在用户登录或退出时执行
在我的 firebase 实用程序文件中,我的方法如下所示:
然后在我的传奇中,目前,我只是在观察者观察到某些东西时尝试登录控制台:
由于未定义“回调”而失败。我本质上是在试图让观察者传递给 sagas,但它不起作用。我的解决方法是将完整的 firebase auth 对象传递给我的登录/注销 saga,然后在其中创建观察者。这有效,但似乎是一个黑客。任何帮助将不胜感激。
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
将永远不会被调度,因此实体不会从商店中删除。
这是否意味着我的架构不正确并且我在某个地方转错了方向?
javascript - 将变量设置为回调监听器的返回
我正在使用 firebase 在我的应用程序中处理身份验证。Firebase 有一个监听器,只要身份验证状态发生变化,它就会执行回调。我在firebase utils文件中有这个:
当用户登录/注销时,回调执行。我正在尝试在 redux-saga 中处理这个观察者,只要 firebase 告诉我状态发生变化,就会向我的 reducer 发送一个事件。我遇到的问题是我无法确定如何控制该观察者的动态返回值。现在我正在这样做:
我已经确认 if/else 条件有效(只是在状态更改时登录到控制台),但如果我尝试使用 yield 会出现错误。这要么是一个错误,要么是我违反了我不清楚的规则。还有其他方法可以设置吗?从最佳实践的角度来看,这似乎确实需要由 redux-sagas 处理。
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
reactjs - 如何在saga中成功调用api后更改url
用例:
用户订阅后,我想导航到另一个页面,通知用户验证他们的电子邮件。
有没有办法导航到成功页面,即/subscribe-success
一旦我收到来自服务器的成功响应?