在 redux reducer 中如何更新数组对象中的 1 属性

In redux reducer how to update 1 property inside array object

我有一个 reducer,它首先获取没有书籍副本计数的书籍数组对象列表 属性,然后它获取每本书的副本数量

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 方法: 我应该每次复制整个数组以及每个 copiesCount 更新的所有对象,还是只复制用新的 属性

修改过的对象?

提前致谢

Redux 仅要求您必须 return 新值实例,如果数据有任何更改,即它强制不变性。 而且它不强制执行减速器的特定形式。 因此,您的问题实际上不是关于 redux 方法,而是关于如何以不可变方式执行数据转换的一般 javascript 任务。

在我看来,您的代码对于这个特定任务来说是绝对正常的。

当前updateBookCopiesCount函数正确。您需要复制需要更新的每一层嵌套,但是只有需要更新的。因此,您需要复制 state(这是通过 state.map() 完成的,并且您需要复制 只是 数组中需要复制的一个对象已更新。所有其他对象应按原样返回。

有关详细信息,请参阅 Redux 文档的 Structuring Reducers - Immutable Update Patterns 部分。