在redux js中命名事件约定

时间:2016-03-02 07:05:25

标签: redux

Redux将调度状态更改操作。 redux中动作类型的命名约定是什么?

4 个答案:

答案 0 :(得分:19)

社区周围有一些约定,我会列出我所知道的并认为在这里很有用的公约:

  1. 最常见的惯例是将动作类型(“事件类型”)保留在CONSTANT_CASE 中。

    这可以避免拼写错误,其中操作的类型为my_type,但缩减器需要my-typeMy_Type类型。

  2. 另一个非常常见的惯例是将操作类型保存在单独的文件中作为常量,例如var MY_ACTION_TYPE = 'MY_ACTION_TYPE';,并从那里使用它们。

    这也可以避免拼写错误,因此您不希望某个操作的类型为MY_ACTION_TYP。如果该变量不存在,您将立即收到错误,特别是如果您正在掉落。

  3. 一个不太常见但非常有用的约定是将操作范围限定为项目和域Erik Rasmussen"Ducks" proposal中推广了这种方法,它指定了动作类型必须采用这种形式:var MY_ACTION_TYPE = 'appname/domain/MY_ACTIONTYPE'

    这避免了两个具有相同值的动作常量的情况。例如。假设您有一个管理区域和面向用户的区域,并且两者都有调度'CHANGE_USERNAME'操作类型的表单。这将使两个减速器拾取相同的动作,其中一个不应该选择另一个。这可能发生在意外,并且非常讨厌追踪。通过在应用程序和域名前添加前缀,可以避免此问题:'appname/admin/CHANGE_USERNAME''appname/user/CHANGE_USERNAME'不同!

  4. 这是我所知道和使用的所有惯例,但我确信其他人有更多 - 你在项目中使用了什么并发现有用?

答案 1 :(得分:13)

还有一些围绕命名异步操作类型的约定。如果您有一组操作来表示获取用户的api调用,则可以将它们拆分为以下内容:

  • FETCH_USER_REQUEST - 当您第一次发送api电话时
  • FETCH_USER_SUCCESS - 用于api调用完成并成功返回数据
  • FETCH_USER_FAIL - 对于api调用失败并回复错误,
  • FETCH_USER_COMPLETE - 有时在通话结束时使用,无论状态如何

答案 2 :(得分:1)

有一种新模式可以解决这个问题,redux-auto

它将减速器组成的思想更进一步。而不是有一个代表你的reducer和创建单独的动作函数的文件。

redux-auto的方法是让文件夹包含单独的JS文件,表示状态上的每个操作/转换,并将其动态地公开为函数

例如

└── store/
    ├──user/
    │  └── index.js
    │  └── changeName.js
    └──posts/
       └── index.js
       └── delete.js

现在,无论如何,你可以在你的应用程序中编写

import actions from 'redux-auto'
...
actions.user.changeName({name:"bob"})

存储/用户/ changeName.js

export default function (user, payload) {
    return Object.assign({},user,{ name : payload.name });
}

多数民众赞成!

如果您想在第三方Reducer中监听redux操作。您可以使用对功能进行宽松的质量检查。

action.type == actions.user.changeName // "USER/CHANGENAME"

对于更高级的内容,您甚至可以查看特定减速器是否拥有某个操作

// Returns true if it's an action specifically for user
if(action.type in actions.user) 

您可以在project page

上阅读更多内容

答案 3 :(得分:0)