我可以在没有动作创建者和减少者的情况下在React和Redux中发送AJAX调用吗?

时间:2016-04-14 23:18:04

标签: javascript ajax reactjs redux

我有一些不直接操纵我的应用状态的ajax请求。在react / redux应用程序中,为这些ajax请求分派动作是否必要(或有任何好处),而不是直接在组件中发送ajax请求?

为了简化我的场景,我基本上有一个我的redux状态的对象列表。我正在使用表单将新对象发布到数据库,成功发布后,我将重定向到发送GET请求的列表页面,并获取列表并更新状态。

发布新对象的AJAX调用并不直接操纵我的状态。

我正在使用的团队正在完成整个3步redux异步步骤 例如:'FETCH_REQUESTED''FETCH_SUCCESS''FETCH_FAIL'以及所有AJAX请求的相应缩减器,添加更多内容并且减速器似乎不是很麻烦有道理。

2 个答案:

答案 0 :(得分:33)

您绝对可以直接从组件发送AJAX调用!

Redux是一种工具,用于使全局共享状态可用于多个组件,并以可预测的方式进行更改。在任何情况下,如果您没有找到这个必要,请不要这样做。

当不同的组件发出相同的API请求然后以类似的方式更改状态时,在动作创建器中保持AJAX调用很方便。如果您希望在已有一些缓存数据可用时避免触发请求,并且您希望将这些检查保留在一个位置而不是分散在组件中,这也很方便。

那说Redux只关心全局状态是如何更新的,如果你只需要从某个组件发出一个AJAX请求,你就不必为它编写一个动作创建器或减速器,除非你觉得它很方便

一般来说,当你有许多复杂的组件时,你可以考虑将Redux(和Flux)重构为 。不是你应该从每个组件开始。您可以仅使用您需要的部分(例如,仅仅是同步的东西),或者甚至在某些情况下完全避免它(例如,可折叠面板不必将其状态存储在商店中)。只有在你了解它在特定情况下给你的特定好处时才使用它,从不“以防万一”或因为它很受欢迎。

另见my answer to “How do dispatch a Redux action with a timeout?”

为了解决您的具体示例,如果您使用Redux为您提供的好处,您可能希望使用Redux:也许您会调度一个操作来乐观地更新表单并立即显示新列表,并将其与提取的内容合并列表何时可用,以便交互瞬间显示。 是异步操作创建者的用例。如果你不是在考虑这种UX复杂性,我不确定Redux是否有必要。

答案 1 :(得分:0)

尝试使用以下链接

https://github.com/sskyy/redux-task

它可以帮助您管理AJAX请求状态,而无需使用那些详细的操作和缩减器。