如何检查大型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的问题。谢谢你的评论,我已经编辑了我的答案。