2016-03-02 40 views

回答

17

周圍有社會上一些約定,我將列出我所知道的,並認爲那些在這裏有用:

  1. 最常見的約定是保持動作類型(「事件類型「)在CONSTANT_CASE

    這避免拼寫錯誤,其中動作的類型爲my_type,但減速預期的類型my-typeMy_Type

  2. 另一種非常常見的慣例是保存動作類型在一個單獨的文件中的常量,例如var MY_ACTION_TYPE = 'MY_ACTION_TYPE';,並從那裏使用它們。

    這樣也可以避免拼寫錯誤,所以您不希望某個操作的類型爲MY_ACTION_TYP。如果變量不存在,你會立即得到一個錯誤,特別是如果你正在發短信。

  3. 一個不太常見,但imho非常有用,約定是的作用範圍爲一個項目和一個域。這種方法在Erik Rasmussen"Ducks" proposal中得到了推廣,它規定了動作類型必須採用這種形狀:var MY_ACTION_TYPE = 'appname/domain/MY_ACTIONTYPE'

    這可以避免兩個動作常量具有相同值的情況。例如。想象你有一個管理區域和麪向用戶的區域,並且都有表單分派'CHANGE_USERNAME'動作類型。這將使兩個減速器採取相同的行動,其中一個不應該選擇另一個。這可能發生在事故中,並且非常煩人追蹤。通過在應用程序和域名前添加它們,可以避免此問題:'appname/admin/CHANGE_USERNAME''appname/user/CHANGE_USERNAME'不同!

這是我所知道的和使用的約定,但我敢肯定,別人有更多的 - 你用什麼,在你的項目中發現有用嗎?

+1

我想指出的是作用域動作類型通過減速器加強** [錯誤動作映射1:1到特定減速器]的不正確**思路(https://github.com/reduxible/reduxible/issues/8)。事實上,一個動作可以(並且通常應該)由不同的減速器處理,反之亦然。 –

+1

這是正確的,雖然這不會讓人們在不同的減速器中採取行動,但看起來可能如此。我會考慮如何編輯答案來反映這一點,或者你是否有想法?編輯:更新了答案 – mxstbr

+4

我只是將其從'app/reducername/ACTION_TYPE'更改爲'app/modulename/ACTION_TYPE'或'app/domain/ACTION_TYPE'類似的東西,以使其清晰可見,動作創建者可能屬於一個組但行動不屬於特定的減速器。 –

12

圍繞命名異步操作類型還有一些約定。如果你有一組動作來表示一個API調用來獲取用戶,你可以將它們分割成類似:

  • FETCH_USER_REQUEST - 當你第一次發送的API調用
  • FETCH_USER_SUCCESS - 爲當API調用完成併成功返回的數據
  • FETCH_USER_FAIL - 爲當API調用失敗,一個錯誤回答:
  • FETCH_USER_COMPLETE - 有時在通話結束不顧身份
使用
1

有一種新的模式解決這個問題,redux-auto

它還原了還原劑成分的想法。而不是有一個代表你的reducer和創建個人行動功能的文件。

終極版,自動的方法有個別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 }); 
} 

這就是!

如果您想要監聽第三方減速器中的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