У меня есть простое приложение со списком задач. Один из экранов представляет собой список «Сегодня и просрочено».
Редуктор задач выглядит следующим образом:
{
"data": {
123: {
"id": 123,
"summary": "blah blah",
"dueDate": "2020-03-12",
"completed": true
},
456: {
"id": 456,
"summary": "some other task",
"dueDate": "2020-03-12",
"completed": false
}
},
"byId": [123, 456]
}
Редуктор моего списка выглядит следующим образом:
{
"data": {
919: {
"id": 919,
"name": "Today & Overdue"
},
818: {
"id": 818,
"summary": "My Cool List"
}
},
"byId": [919, 818]
}
Вкл. Из списка «Сегодня и просрочено» мне нужно выбрать все задачи, для которых dueDate
сегодня или старше. Я попытался использовать перезапуск, чтобы оптимизировать производительность экрана списка, с помощью:
# Get end of day today
const now = moment();
const endOfDay = Date.parse(now.endOf("day").utc(true).utcOffset(0).format());
const getTasksTodayOrOlder = (state) => Object.values(state.tasks.data).filter(task => Date.parse(task.dueDate) <= endOfDay);
Но похоже, что каждый раз, когда поле в данных задач изменяется (т. Е. Завершено или сводно), getTasksTodayOrOlder
регенерирует селектор.
Это единственный способ сохранить кеш на редукторе tasks
; что-то вроде byDueDate
для отслеживания массива массивов сроков исполнения.
{
"data": ...,
"byId": ...,
"byDueDate": {
"2020-03-19": [112,123,141, ...],
"2020-03-20": [922, 939, ...],
}
}
Кэш даты выглядит как большая нагрузка и может выйти из строя c.
Каков рекомендуемый способ обработки повторного выбора, который будет:
- Будет ли выполняться фильтрация для задач, которые должны быть выполнены сегодня или старше
- Задачи, которые не выполнены