redux js中事件的命名约定

redux js中事件的命名约定,redux,Redux,Redux将为状态更改分派操作。redux中动作类型的命名约定是什么?社区中有一些约定,我将在这里列出我知道并认为有用的约定: 最常见的约定是将中的动作类型(“事件类型”)保持不变 这样可以避免拼写错误,其中操作的类型为my\u type,而reducer需要的类型为my type或my\u type 另一个非常常见的约定是将动作类型作为常量保存在单独的文件中,例如var MY_action_TYPE='MY_action_TYPE',并从那里使用它们 这也避免了拼写错误,因此您不希望操作的类型

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

社区中有一些约定,我将在这里列出我知道并认为有用的约定:

  • 最常见的约定是将
    中的动作类型(“事件类型”)保持不变

    这样可以避免拼写错误,其中操作的类型为
    my\u type
    ,而reducer需要的类型为
    my type
    my\u type

  • 另一个非常常见的约定是将动作类型作为常量保存在单独的文件中,例如
    var MY_action_TYPE='MY_action_TYPE',并从那里使用它们

    这也避免了拼写错误,因此您不希望操作的类型为
    MY\u action\u TYP
    。如果变量不存在,您将立即得到一个错误,特别是如果您正在进行linting

  • 一个不太常见但非常有用的约定是将操作范围限定到项目和域。这种方法在his中得到了推广,his规定动作类型必须是这样的:
    var MY\u action\u TYPE='appname/domain/MY\u ACTIONTYPE'

    这避免了两个动作常数具有相同值的情况。例如,假设您有一个管理区域和面向用户的区域,两个区域都有发送
    'CHANGE\u USERNAME'
    操作类型的表单。这将使两个减速器采取相同的行动,其中一个不应采取另一个。这可能发生在事故中,追踪起来非常烦人。通过使用app和域名作为前缀,可以避免这个问题:
    'appname/admin/CHANGE\u USERNAME'
    不同于
    'appname/user/CHANGE\u USERNAME'


  • 这就是我所知道和使用的所有约定,但我相信其他人还有更多约定——您在项目中使用了哪些约定并发现了哪些约定有用?

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

    • FETCH\u USER\u REQUEST
      -用于首次发送api调用的时间
    • FETCH\u USER\u SUCCESS
      -用于api调用完成并成功返回数据的时间
    • FETCH\u USER\u FAIL
      -当api调用失败并响应错误时
    • FETCH\u USER\u COMPLETE
      -有时在呼叫结束时使用,无论状态如何

      • 有一种新的模式可以解决这个问题

        它将减速器组成的思想进一步推进。而不是用一个文件来表示减速机并创建单独的操作函数

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

        范例

        └── store/
            ├──user/
            │  └── index.js
            │  └── changeName.js
            └──posts/
               └── index.js
               └── delete.js
        
        现在,不管怎样,你都可以在应用程序中编写

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

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

        如果您想在第三方还原程序中侦听redux操作。您可以使用此功能作为松散质量检查

        action.type == actions.user.changeName // "USER/CHANGENAME"
        
        对于更高级的内容,您甚至可以看到某个操作是否属于特定的还原程序

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

        您可以在

        上阅读更多内容,请参阅Redux官方样式指南:


        我想指出,reducer的作用域动作类型强化了以下错误观点:。事实上,一个动作可以(而且通常应该)由不同的还原器处理,反之亦然。这是正确的,虽然这并不能阻止一个人在不同的还原器中选择一个动作,但看起来可能是这样的。我会考虑如何编辑答案来反映这一点,或者你有什么想法吗?编辑:更新了答案。我只需将答案从
        app/reducername/ACTION\u类型
        更改为
        app/modulename/ACTION\u类型
        app/domain/ACTION\u类型
        ,以明确还原者和操作创建者可能属于一个组,但操作不属于特定的还原者。