如何适应访问数据库的reducer逻辑

时间:2016-08-28 02:59:11

标签: redux react-redux

假设您需要在UI中加载一些信息。 为此,您从数据库中检索实体A的列表,然后在该列表中进行一些处理(如过滤和进行一些计算以创建计算属性),然后对结果列表中的每个元素进行处理A2的{​​{1}},你从数据库中检索实体B,然后再做一些计算。之后,您发送该信息以更新UI。

以下是步骤列表中解释的相同内容:

  • 我想将A转换为PresentationA
  • 检索A
  • 的列表
  • A
  • 的过滤列表
  • 处理从AA2
  • 的结果
  • 检索与B
  • 相关联的A2.bID
  • 每对A2 / B创建PresentationA
  • 返回PresentationA
  • 列表

换句话说,我必须在处理逻辑的中间有条件地调用数据库。

我如何在Redux中使用它?

最初我想将动作发送为RetrieveListOfA,但即使我在动作创建器中检索A并将该信息传递给reducer,我仍然需要访问数据库再次为实体B,这不能由reducer完成。

检索A列表,发送到reducer,然后让reducer保存(有一些回调,其中将插入其余的处理),对我来说也没有多大意义状态树,只是发送另一个动作来继续处理。

如果示例不是很清楚,请告诉我。

添加一些代码:

struct A {
    let id: String
    let someProperty: Bool
    let x: Int
    let y: Int
}
struct A2 {
    let id: String
    let r: Int
}
struct B {
    let r: Int
    let someValue: String
}
struct PresentationA {
    let r: Int
    let v: String
}

let listA = [A]() // get from database

let listPresentationA = listA
    .filter({ a in
        return a.someProperty
    })
    .map({ a in
        return A2(id: a.id, r: a.x + a.y)
    })
    .map({ a2 in
        let b = B(r: 0, someValue: "") // get B associated with a2.id form database

        return PresentationA(r: a2.r + b.r, v: b.someValue)
    })

// display listPresentationA in the UI

0 个答案:

没有答案