首页 > 解决方案 > 通过重新选择将选择器结果传递给另一个选择器

问题描述

我正在创建选择器以从我的状态获取派生数据,但我遇到了一个问题,即我的一个输入选择器依赖于另一个输入选择器的结果,我找不到解决它的方法。我的 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
)

如何创建选择器来获取任务的前身结束日期?我想获取任务的前身 ID,然后使用该 ID 调用 getTaskEnd 选择器。我不能将一个的结果用作另一个的参数。

PS - 我知道这没有正确记忆。我计划使用re-reselect。只是还没到那个地步。

标签: reactjsreact-reduxreselect

解决方案


推荐阅读