【发布时间】:2017-11-19 06:34:30
【问题描述】:
我正在开发我的第一个 angular ngrx 应用程序,但相关实体存在问题。我有两个 reducer,一个叫做 Page,一个叫做 Section。下面是该结构的简化版本。 section 对象有一个 pages 数组,其 pageIds 指向 page reducer 中的页面。
// section.reducer.ts
sections: {
1: {
id: 1,
title: 'Section 1',
pages: [1,2,3]
}
}
// page.reducer.ts
pages: {
1: {
id: 1,
title: 'Page 1'
},
2: {
id: 2,
title: 'Page 2'
}
3: {
id: 3,
title: 'Page 3'
}
}
当我想添加一个新页面并将其添加到一个部分时,我正在苦苦挣扎。我的第一个想法是调度一个 AddPage 操作并在两个减速器中处理它。那么问题是 Page 对象是在页面缩减器中创建的,因此部分缩减器不知道它。我必须至少在 section reducer 中有 pageId。然后我认为我可以使用新创建的页面发送 AddPageSuccess 以便节缩减器可以处理它。这种方法的问题在于,reducer 中没有对 store 的引用,因此我无法调度任何操作。因此,我尝试像 @effect 一样添加它。这可能会奏效,但我不确定这是否是“正确”的方式。我的印象是效果应该用于异步数据,例如休息调用。在这种情况下,一切都是同步的,但动作相互依赖。 @effects 是实现这种行为相互依赖的场景的“有效”方式,还是这种设计错误。
另一种方法是将所有状态都放在同一个减速器中,但该减速器会很大,因为每个部分都会有很多逻辑。
【问题讨论】: