Я создаю селекторы, чтобы получать производные данные из моего состояния, но у меня возникает проблема, когда один из моих входных селекторов зависит от результата другого входного селектора, и я не могу найти способ обойтиЭто.Мое состояние Redux сериализуемо и нормализовано, подобно реляционной базе данных, и упрощенная версия выглядит примерно так:
const state = {
tasks: {
1: {
manualStart: '1/1/2019'
duration: 3
},
2: {
manualStart: undefined
duration: 2
},
3: {
manualStart: undefined
duration: 5
},
...
},
taskPredecessors: {
2: 1,
3: 2,
...
}
}
Это означает, что задача 1 должна быть выполнена до того, как задача 2 может начаться, и так далее, и так далее.Я пытаюсь написать селекторы, чтобы получить даты начала / окончания каждой задачи на основе их предшественника или использовать запуск вручную, если таковой существует.
Мой первоначальный инстинкт - написать селекторы, которые выглядят так:
const getTaskStart = createSelector(
getTaskManualStart,
getTaskPredecessorEnd,
(manualStart, predecessorEnd) => manualStart || predecessorEnd
)
const getTaskEnd = createSelector(
getTaskStart,
(state, { taskID }) => state.tasks[taskID].duration,
(taskStart, duration) => taskStart + duration
)
const getTaskManualStart = (state, { taskID }) => state.tasks[taskID].manualStart
????? const getTaskPredecessorEnd = createSelector (
(state, { taskID }) => state.taskPredecessors[taskID],
(predTaskID) => // Need tocall getTaskEnd of the predTaskID without ref to State
)
Как мне создать селектор, чтобы получить дату окончания предшествующей задачи?Я хочу получить идентификатор предшественника задачи, а затем вызвать метод выбора getTaskEnd с этим идентификатором.Я не могу использовать результат одного в качестве параметра для другого.
PS - я знаю, что это не запоминается должным образом.Я планирую использовать повторно выбрать .Просто еще не дошел до этого.