2017-07-26 61 views
0

我有一個減速,那首先得書數組對象的列表沒有書副本count屬性,而且比每本書得到它的拷貝數在終極版減速器如何更新數組對象內1個屬性

const bookList= (state = [], action) => { 
    switch (action.type) { 
     case 'BOOKS_REQUEST_SUCCEEDED': 
      return Object.assign({}, state, action.payload); 
     case 'BOOKS_COUNT_REQUEST_SUCCEEDED': 
      return updateBookCopiesCount(state, action); 
     default: 
      return state 
    } 
} 

const updateBookCopiesCount = (state, action) => { 
    const newState = state.map((book) => { // updating only the book copies count 
     if (book.Id === action.payload.Id) { 
      return { ...book, 
       copiesCount: action.payload.copiesCount 
      }; 
     } 
     return book; 
    }); 
    return newState; 
} 

我的問題是,什麼是正確的終極版的做法: 應該每次我整個數組複製爲每個copiesCount更新所有對象,還是確定只複製,將其與新的屬性修改的對象

在此先感謝

回答

0

當前updateBookCopiesCount功能是正確的。您需要複製需要更新的每個嵌套級別,但僅需需要更新的內容。所以,你需要複製state(其正在通過state.map()完成的,你需要複製只是需要更新的陣列內的一個對象。所有其他對象應返回原樣。

有關更多信息,請參閱Redux文檔的Structuring Reducers - Immutable Update Patterns部分。

1

Redux僅要求您必須在數據發生任何更改時才返回新的值實例,即強制執行不變性。 它並沒有強制你的reducer的特定形式。 所以,你的問題有效的不是關於redux方法,而是關於一般的JavaScript任務如何以不可變的方式執行數據轉換。

從我的觀點來看,你的代碼對於這個特定的任務來說絕對正常。