Передать результат селектора другому селектору с помощью повторного выбора - PullRequest
0 голосов
/ 18 февраля 2019

Я создаю селекторы, чтобы получать производные данные из моего состояния, но у меня возникает проблема, когда один из моих входных селекторов зависит от результата другого входного селектора, и я не могу найти способ обойтиЭто.Мое состояние 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 - я знаю, что это не запоминается должным образом.Я планирую использовать повторно выбрать .Просто еще не дошел до этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...