调度一个动作是否总是会导致应用程序状态发生变化?

Should dispatching an action always cause a change in application state?

这更像是一个最佳实践问题。我正在考虑我在减速器中观察到的一段代码,它是这样的:

if (!state.arrayOfObjects) return;
else {/** add an object to the array of objects/}

凭直觉,我认为一个动作是对应用程序状态进行一些更改的发生的事情。如果调度一个动作不会导致状态改变,那么我觉得这个动作很可能根本不应该被调度。如果在 reducer 中有一些条件阻止发生变化,它可能应该是调度 action 本身的条件。

另一方面,也许 reducer 中的条件是一种基于 属性 创建条件的方法,您不一定希望订阅组件。但是,我认为如果特定操作取决于 属性,那么组件不需要通过订阅获得 属性 的最新值来确定它是否是很奇怪的应该派遣了。

这个问题有一篇非常好的文章,因为我自己无法安静地解释答案。 http://jamesknelson.com/join-the-dark-side-of-the-flux-responding-to-actions-with-actors/

在 Redux 中,任何数字或缩减器都可以对任何操作做出反应。这包括 0 个减速器和 50 个减速器。

Redux 风格指南鼓励 Model Actions as Events, Not Setters and to Put as Much Logic as Possible in Reducers

因此,虽然这可能不是常见情况,但让任何 reducer 或中间件都不会响应的操作是完全可以的 - 例如用于记录目的或因为 reducer 将来可能会使用它。根据某些逻辑,reducer 有时会做出反应的动作是完全正常的,而且 100% 没问题。