用于基于属性从redux状态删除多个条目的模式

时间:2017-08-25 18:32:09

标签: javascript redux react-redux

我使用了丹·阿布拉莫夫在他的课程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;
  }
};

0 个答案:

没有答案