在 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 部分。
我有一个 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 部分。