为什么要使用导出的常量设置redux动作类型?

Ale*_*lex 4 javascript reactjs redux react-redux

我正在尝试学习对redux的反应,我已经阅读了redux的主要文档,我们应该将动作类型存储到一个js文件中,然后导出所有常量并将其用作类型,例如,它是简单模式:

export function itemsAction(items) {
    return {
        type: 'ITEMS',
        data: items
    }
}
Run Code Online (Sandbox Code Playgroud)

但显然我应该采用以下格式:

import { types } from './Types';

export function itemsAction(items) {
    return {
        type: types.ITEMS,
        data: items
    }
}
Run Code Online (Sandbox Code Playgroud)

但是这个技巧的主要好处是什么?操作是固定的,永远不会改变,为什么我应该从变量设置操作类型并导入所有类型?

谢谢

Jay*_*444 6

因为很高兴知道您使用的是对象属性,而不是原始字符串,因为原始字符串容易出现错字。举个例子:

export function itemsAction(items) {
    return {
        type: 'ITEMS',
        data: items
    }
}
Run Code Online (Sandbox Code Playgroud)

现在假设我有一个reducer来处理也使用原始字符串的操作:

const todos = (state = [], action) => {
  switch (action.type) {
    case 'ITESM':
      return state.map(item => item.something = "potato")
    default:
      return state
  }
}
Run Code Online (Sandbox Code Playgroud)

在化简器中,我为它的情况拼错了动作类型。但是由于Javascript和Redux的工作方式,它不会在IDE lint中作为错误出现,也不会在执行代码时产生任何错误。您将分派该操作,它将以静默方式失败。什么都不会发生,没有行动,没有错误,什么也没有。调试可能会很痛苦。

此外,如果要更改动作名称该怎么办。最好只是更改对象中的值,而不是在整个项目中进行大量查找和替换,以免您覆盖过程中不是您想要的内容,这是很好的。

另外,将所有动作类型都放在一个地方也很好,因此您可以浏览并查看可用的内容,而不用浏览所有动作文件。一旦您的项目发展壮大,您一定会很高兴。

另外,在Typescript上它特别有用,因为如果您尝试使用尚未定义的操作,甚至都无法构建,那么您就可以获得一定的构建时间安全性。

  • “另外,将所有动作类型放在一个地方真是太好了,这样您就可以浏览并查看可用的内容,而不是查看所有动作文件。一旦您的项目增长,您会很高兴自己做到了。 ” 此处的这一点可能是将类型存储在单独文件中的一种更为低调的好处。它创建了一个结构,向您显示您可用的所有内容,这在协作工作时特别有效。 (2认同)