我使用了丹·阿布拉莫夫在他的课程Building React Applications with Idiomatic Redux中使用的模式。在这个课程中,他的州看起来像这样:
{
byIds: {
123: {},
456: {}
},
allIds: [ 123, 456 ]
}
所以除了这个一般的想法之外,想象一下,你有多个列表,而不只是一个todos列表。并且状态中的每个待办事项都有一个listId属性,该属性引用它所属的列表。从商店中删除列表时,您还希望删除与该列表关联的所有待办事项。我理解如何在状态的byIds部分执行此操作,因为byIds中的每个待办事项都有一个listId属性。但是我不确定从州的allIds部分删除待办事项的最佳方法是什么。下面是一个简单的状态和缩减器:
TODOS STATE
{
byIds: {
123: { listId: 'abc' },
456: { listId: 'def' }
},
allIds: [ 123, 456 ]
}
TODOS ALLIDS REDUCER
const allIds = (state = [], action) => {
switch (action.type) {
case DELETE_TODO:
return state.filter(t => (t !== action.id));
case DELETE_TODOS_FOR_LIST:
// ========================
// HOW DO I DO THIS?
// ========================
default:
return state;
}
};