我有一些 Ajax 请求,它们不直接操作我的应用程序状态。在react/redux应用程序中,是否有必要(或者有什么好处)为这些ajax请求分派(dispatch)一个 Action ,而不是直接在组件中发送ajax请求?

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

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

与我合作的团队正在完成完整的 3 步 redux 异步步骤 例如:'FETCH_REQUESTED''FETCH_SUCCESS''FETCH_FAIL'以及所有AJAX请求的相应reducer,这是一个很大的麻烦添加更多,reducers 似乎没有意义。

请您参考如下方法:

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

Redux 是一个工具,可以使共享状态在全局范围内可供多个组件使用,并以可预测的方式进行更改。如果您认为没有必要,请不要这样做。

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

也就是说,Redux 只关心全局状态如何更新,如果您只需要从某个组件发出 AJAX 请求,则不必为其编写操作创建器或 reducer ,除非您觉得方便.

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

另请参阅my answer to “How do dispatch a Redux action with a timeout?”

为了解决您的具体示例,如果您使用 Redux 给您带来的好处,您可能希望使用 Redux 来实现此目的:也许您调度一个操作来乐观地更新表单并立即显示新列表,并将其与获取的列表合并列出可用的时间,以便交互看起来是即时的。 是异步操作创建者的用例。如果您没有考虑这种用户体验复杂性,我不确定 Redux 是否有必要。


评论关闭
IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!