【发布时间】:2016-05-17 16:55:37
【问题描述】:
我正在将现有的状态模型转换为 Redux,并且大部分情况下它都很轻松。然而,我遇到的一点是转换“观察到的”状态 ajax 请求。本质上,我将某些 ajax 请求“链接”到其他状态,因此无论谁修改它们,它们总是会正确发出。我可以通过订阅 Redux 存储更新来获得类似的行为,但在侦听器中触发操作感觉就像是 hack。
一个可能的解决方案是通过 thunk 模式将逻辑移动到动作创建者。问题是我要么必须跨动作复制获取逻辑(因为多个动作可以修改“观察到的”状态),要么将大多数减速器逻辑拉到动作创建者级别。动作创建者也不应该知道减速器将如何响应发出的动作。
我可以批量处理“子动作”,因此我只需在每个动作“块”中放置适当的获取逻辑,但这似乎违反了动作产生有效状态的概念。我宁愿在动作创建者级别承担此责任。
是否有任何普遍接受的规则?这不是一个简单的应用程序,其中在与组件交互时发出临时 ajax 请求,大多数数据在多个组件之间共享,并且请求被优化和获取以响应状态变化。
TLDR; 我想触发 ajax 请求以响应状态变化,而不是在发生特定操作时。除了在订阅侦听器中触发这些操作之外,是否有更好的“Redux 特定”方式来组织 action/actionCreators 来模拟这种行为?
【问题讨论】:
-
我不能 100% 确定我是否完全理解问题,但您是否希望作为该操作的结果调度更多操作?您可以为此使用 radux 中间件 - 查看 thunk 源代码(您已经提到了 thunk 模式,我认为这是一种很好的方法)。如果这是您正在寻找的,我可以制定答案,
-
抱歉,我有胡说八道的倾向。简而言之,我想触发我的 ajax 请求以响应状态变化,而不是在发生特定操作时。除了在订阅侦听器中触发这些操作之外,还有更好的“Redux 特定”方式吗?
-
别担心,伙计——我一直都是一样的。我对 redux 操作的看法是它们是直接的状态更改器。您触发您的状态将更改的操作,但我从未使用过订阅者或侦听器,如果我需要触发额外的“远程操作”或让两个减速器响应单个操作,如果我想更改状态,我总是使用中间件在两个地方。我将为中间件添加答案。
标签: ajax asynchronous architecture state redux