我有一些不直接操纵我的应用状态的ajax请求。在react / redux应用程序中,为这些ajax请求分派动作是否必要(或有任何好处),而不是直接在组件中发送ajax请求?
为了简化我的场景,我基本上有一个我的redux状态的对象列表。我正在使用表单将新对象发布到数据库,成功发布后,我将重定向到发送GET请求的列表页面,并获取列表并更新状态。
发布新对象的AJAX调用并不直接操纵我的状态。
我正在使用的团队正在完成整个3步redux异步步骤
例如:'FETCH_REQUESTED'
,'FETCH_SUCCESS'
,'FETCH_FAIL'
以及所有AJAX请求的相应缩减器,添加更多内容并且减速器似乎不是很麻烦有道理。
答案 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)