如何检查大型Redux应用程序中是否已使用操作名称?

如何检查大型Redux应用程序中是否已使用操作名称?,redux,Redux,因此,在未来,他们将采取以下行动: onIncrement={() => store.dispatch({ type: 'INCREMENT' })} 但是现在让我们假设我的应用程序变大了。那我怎么知道已经采取了哪些行动名称呢?我可以想到的一种方法是在操作前面加上它正在修改的数据的名称,所以这里 onIncrement={() => store.dispatch({ type: 'COUNTER_INCREMENT' })} 另一种方法是使用typescript并定义联合类型 t

因此,在未来,他们将采取以下行动:

onIncrement={() => store.dispatch({ type: 'INCREMENT' })}
但是现在让我们假设我的应用程序变大了。那我怎么知道已经采取了哪些行动名称呢?我可以想到的一种方法是在操作前面加上它正在修改的数据的名称,所以这里

onIncrement={() => store.dispatch({ type: 'COUNTER_INCREMENT' })}
另一种方法是使用
typescript
并定义联合类型

type reduxActions = 'COUNTER_INCREMENT' | 'COUNTER_DECREMENT' | ...
那么社区的方法是什么呢?

TLDR:创建一个包含动作类型的文件,这是常用的解决方案之一

通常情况下,如果你的代码不是一团糟的话,问题就不大了——结构良好的Redux应用程序将其动作/动作创建者保存在一个单独的文件夹中,因此检查动作名称是否已经被采用应该是轻而易举的事

为了进一步防止检查动作名称的唯一性时出现此类问题,您可以将所有动作名称导出到类似
常量/actionTypes.js
的文件中

然后,只需导出所有动作类型

export const increment = 'INCREMENT';
export const decrement = 'DECREMENT';
然后再导入它们

import { increment, decrement } from '../constants/actionTypes';
// or
import * as actionTypes from '../constants/actionTypes';
现在,如果您试图在
常量/actionTypes.js
文件中用动作类型名称重新声明一个常量,JavaScript会抛出一个
未捕获的语法错误:标识符“constName”已经声明了
错误-这使得这样的缺陷很容易被发现

就这么简单。

TLDR:创建一个包含操作类型的文件,这是常用的解决方案之一

通常情况下,如果你的代码不是一团糟的话,问题就不大了——结构良好的Redux应用程序将其动作/动作创建者保存在一个单独的文件夹中,因此检查动作名称是否已经被采用应该是轻而易举的事

为了进一步防止检查动作名称的唯一性时出现此类问题,您可以将所有动作名称导出到类似
常量/actionTypes.js
的文件中

然后,只需导出所有动作类型

export const increment = 'INCREMENT';
export const decrement = 'DECREMENT';
然后再导入它们

import { increment, decrement } from '../constants/actionTypes';
// or
import * as actionTypes from '../constants/actionTypes';
现在,如果您试图在
常量/actionTypes.js
文件中用动作类型名称重新声明一个常量,JavaScript会抛出一个
未捕获的语法错误:标识符“constName”已经声明了
错误-这使得这样的缺陷很容易被发现


就这么简单。

免责声明:我是这方面的主要贡献者

我创建这个库就是为了解决这个问题()。它可以从一个子空间中调度,这样你就可以将你的应用程序分成逻辑部分(你可能已经在用你的react组件这样做了),并使用有意义的动作名称,而不必担心来自大型应用程序其他部分的串扰

<SubspaceProvider mapState={(state) => state}, namespace='counter'>
    <Counter />
</SubspaceProvider>
事实上,使用redux子空间,您甚至可以在同一页面上放置多个计数器而不会出现问题。(注意:在本例中,您需要稍微更改组件的设置方式)

state.counter1},namespace='counter1'>
state.counter2},namespace='counter2'>

免责声明:我是该公司的主要出资人

我创建这个库就是为了解决这个问题()。它可以从一个子空间中调度,这样你就可以将你的应用程序分成逻辑部分(你可能已经在用你的react组件这样做了),并使用有意义的动作名称,而不必担心来自大型应用程序其他部分的串扰

<SubspaceProvider mapState={(state) => state}, namespace='counter'>
    <Counter />
</SubspaceProvider>
事实上,使用redux子空间,您甚至可以在同一页面上放置多个计数器而不会出现问题。(注意:在本例中,您需要稍微更改组件的设置方式)

state.counter1},namespace='counter1'>
state.counter2},namespace='counter2'>

您也可以查看程序包。

您也可以查看程序包。

不确定这是否解决了问题,即两个动作类型具有相同的名称。嗯,您将无法重新声明具有相同名称的常量-如果在
常量/actionTypes.js
中声明重复的操作类型,JavaScript将抛出错误-这解决了OP的问题。谢谢你的评论,我已经编辑了我的答案。我不确定这是否解决了这个问题,即两个同名的动作类型。那么,你将无法重新声明同名的常量-如果你在
常量/actionTypes.js
中声明重复的动作类型,JavaScript将抛出错误-这解决了OP的问题。谢谢你的评论,我已经编辑了我的答案。