簡體   English   中英

在Redux Reducer中,如何更新數組對象內的1個屬性

[英]In redux reducer how to update 1 property inside array object

我有一個化簡器,它首先獲取沒有書本計數屬性的書本數組對象列表,然后為每本書獲取書本數

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;
}

我的問題是,正確的redux方法是什么:我應該每次復制整個數組以及每個copysCount更新的所有對象時,還是應該只復制使用new屬性修改過的對象?

提前致謝

Redux僅要求如果數據有任何更改,則必須返回新的值實例,即,它強制不變性。 而且它不強制執行減速器的特定形式。 因此,您的問題實際上不是關於redux方法,而是關於如何以不變的方式執行數據轉換的一般javascript任務。

我認為您的代碼對於此特定任務絕對是正常的。

當前的updateBookCopiesCount函數正確。 您需要復制需要更新的嵌套的每個級別,但復制需要更新的嵌套。 因此,您需要復制state (這是通過state.map() ,並且需要復制數組中需要更新的一個對象。所有其他對象應按原樣返回。

有關更多信息,請參見Redux文檔的“ 構造化約化器-不可變的更新模式”部分。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM