在 Redux 中,如果所有 reducer 在动作触发时都被调用,那么是啥阻止了动作之间可能的命名冲突?

Posted

技术标签:

【中文标题】在 Redux 中,如果所有 reducer 在动作触发时都被调用,那么是啥阻止了动作之间可能的命名冲突?【英文标题】:In Redux if all reducers are called when an action fires, then what's preventing possible naming conflict among actions?在 Redux 中,如果所有 reducer 在动作触发时都被调用,那么是什么阻止了动作之间可能的命名冲突? 【发布时间】:2020-04-02 23:36:45 【问题描述】:

每个大组件都有自己的操作列表。文件的分离意味着它们是孤立的动作。但是根据我的理解,如果一个动作的类型与另一个动作的类型在完全独立的文件中用于不同的 reducer 匹配仍然会导致问题。

编辑:

如果我在应用中有两个部分。一个有用于动作 SET_SCROLL 的减速器,其他部分也有。如果我通过触发 SET_SCROLL 更新第 2 节中的滚动位置。这将导致第 1 节的状态发生变化。现在想象一下 100 多个动作,你如何防止命名冲突?我知道在 redux 中你不能将一组动作与某个 reducer 关联起来。

【问题讨论】:

你能举个例子吗?很难说你问的是什么问题。 为什么你认为这可能是reducer的问题?他只会开两枪¯\_(ツ)_/¯ @MuhammadUmer 请edit你的问题包括这个例子,不要只是把它放在评论中。 您可以使用对您的项目有意义的约定通过命名空间正确命名您的操作,并在调用操作时使用常量。 TL;DR:在代码级别没有任何东西可以防止名称冲突。 你能提出一个共同的约定吗? 【参考方案1】:

是的,这就是您在定义动作类型时应该小心的原因。 "Reusing Reducer Logic" docs page 举例说明了当您想在多个地方重用给定的 reducer 时,这可能会成为一个问题,并展示了一些解决方法。

我们特别推荐defining action types as "domain/someAction" 来帮助避免冲突。

注意it's also possible (and recommended) to have many different parts of the reducer logic all independently respond to the same dispatched action

【讨论】:

以上是关于在 Redux 中,如果所有 reducer 在动作触发时都被调用,那么是啥阻止了动作之间可能的命名冲突?的主要内容,如果未能解决你的问题,请参考以下文章

所有的 redux 动作都应该有相应的 reducer 吗?

如果直接在 Redux reducer 中修改状态会发生啥?

如何在 reducer 中处理 Redux 的 redux-promise 中间件 AJAX 错误?

手动实现redux

在 Redux Reducer 中读取 Store 的初始状态

Redux