2015-12-18 35 views
1

我有一個包含數組的redux/react應用程序。這個數組的每個元素都有一些基本屬性,這兩者的和不能超過3個。這些選項因此,任何正常:如何在redux中強制執行數據約束

arrayState: [ 
    {id: "a", number: 3} 
] 

arrayState: [ 
    {id: "a", number: 1}, 
    {id: "b", number: 2} 
] 

arrayState: [ 
    {id: "a", number: 1}, 
    {id: "b", number: 1} 
    {id: "c", number: 1} 
] 

然後我有一個減速,增加了一個新的陣列項目,一個該編輯現有項目的數量(這裏使用了React Update Addon語法是希望言自明)

function items(items = INITIAL_STATE, action) { 
    switch (action.type) { 
     case actionTypes.ADD_ITEM 
      return update(items, {$push: [INITIAL_STATE[0]]}); 
      break; 
     case actionTypes.SET_ITEM_NUMBER: 
      return update(items, {[action.index]: {number: {$set: action.number}}}); 
      break; 
    } 
    return items; 
} 

怎麼了,在我的應用程序什麼時候(行動的創建者,減速機,選擇,或反應的組分)我應該實施這個「最大3」規則?從理論上講,我可以拒絕任何會使計數增加到3以上的動作,但我不知道用redux做到這一點的最佳做法。

回答

1

我認爲這將在減速機中效果最好。對於這些操作中的每一個,如果新的一組項目是有效的,則返回該新的組,否則返回當前項目並且可能隨之一起設置錯誤。

+0

這似乎是一個優雅的解決方案 – Miguel

+0

如果我要在減速器中設置一個錯誤,我會這樣做使用動作,或者我會直接在減速器中修改狀態? – Miguel

+0

我只是在減速器中設置錯誤。您可能需要將狀態參數更新爲'(state = INITIAL_STATE,action)'並使用'state.items'和'state.error'。當項目無效時設置錯誤,否則清除錯誤。 – Dylan

相關問題