【问题标题】:Redux - Is it okay to have actions that don't effect the sateRedux - 可以有不影响状态的操作吗
【发布时间】:2016-04-29 04:51:54
【问题描述】:

可以在 Redux 状态树中设置不影响任何内容的操作吗?

例如

一个异步请求只响应 HTTP 代码 200 或 404 ...

【问题讨论】:

  • 事件200、404是状态变化(错误处理)

标签: javascript reactjs frontend redux react-redux


【解决方案1】:

是的。 完全没问题。

如果你的商店写得很好,它几乎只是返回它之前的值的副本。

也就是说,触发一个完全不执行任何操作的事件是毫无用处的。

Redux 教程建议将动作、动作创建者和使用动作调用动作创建者的人分开的原因正是为了让您可以决定将什么发送到商店;没有“单击此处获得 50/50 的机会我们将更新商店”,因为它不再是函数方法的一部分。

【讨论】:

  • 哇,好吧!所以我不用派人!太好了!
  • Redux 旨在存储状态、管理状态并根据状态的更改更新视图。如果没有状态发生变化,并且您的页面关心结果,而用户不关心根据结果查看新视图,那么显然没有理由调度它。
【解决方案2】:

我会说“是的,没关系”——尽管这是我的看法。

它让您可以进一步扩展您的应用程序。例如,你可以有类似的东西:

export function fetch(sysId:string) {
    return function(dispatch:Function) {
        dispatch(fetching());

        $.ajax(...)
            .fail(e => dispatch(failed()))
            .done(data => dispatch(fetched(data)));
    }
}

export function failed() {
    return { type: 'SERVER/FAILED' };
}

export function fetching() {
    return { type: 'SERVER/FETCHING' };
}

export function fetched(data:Object) {
    return { type: 'SERVER/FETCHED', data };
}

目前,对于 failedfetching 操作,您可能零打算在减速器中执行任何操作。

然后你意识到你需要一个动画加载器来显示。很简单,因为您已经完成了这些操作。显然,有理由 not 添加任何你不需要的东西,但我认为对于像这样的常见部分来说,它的开销很小。

【讨论】:

  • 这正是我的看法!很高兴听到其他人同意
  • 我知道你的意思。我有点认为/证明它是因为该操作正在影响您的应用程序的状态,即使您的减速器没有响应它
【解决方案3】:

它的响应是什么? Actions 真的只是设置 Redux 状态,如果你不需要设置状态,你为什么要调用一个动作?在这种情况下,只需直接在组件中执行您必须执行的任何操作即可。

【讨论】:

  • 是的,这也是我的想法。虽然我指的是对我的应用程序服务器的 API 调用。 (AJAX)。
  • 问题是你对响应做了什么?保存状态?执行某事然后丢弃结果?它必须是一个或另一个。如果是前者,则将其保存到 Redux 状态,如果是后者,则在您的组件中使用并丢弃。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-30
  • 2016-10-16
  • 2022-08-17
  • 2020-11-12
  • 1970-01-01
  • 2020-03-01
  • 2021-03-29
相关资源
最近更新 更多