Angular2-减缩者之间共享行动是个坏主意吗?

Angular2-减缩者之间共享行动是个坏主意吗?,angular,redux,ngrx,Angular,Redux,Ngrx,我们正在Angular 2应用程序中使用ngrx/store。我们的商店由减速机组合而成“摄像机减速机”、“主题减速机”。。。我们还希望维护一些全局性的和通用的(跨不同功能的)项,如中的“加载数据”属性“appeducer” 在这样的场景中,在单个还原器和赋值器之间共享像{type:LOADING*,payload}这样的操作有意义吗?当一项功能(可以被认为是一个单一的数据操作[使用一个简化程序和一个操作]或多个相关的数据操作[使用多个简化程序和多个操作])启动并在完成后关闭时,应打开该功能。程

我们正在Angular 2应用程序中使用ngrx/store。我们的商店由减速机组合而成
“摄像机减速机”、“主题减速机”
。。。我们还希望维护一些全局性的和通用的(跨不同功能的)项,如
中的“加载数据”属性“appeducer”

在这样的场景中,在
单个还原器
赋值器
之间共享像
{type:LOADING*,payload}
这样的操作有意义吗?当一项功能(可以被认为是一个单一的数据操作[使用一个简化程序和一个操作]或多个相关的数据操作[使用多个简化程序和多个操作])启动并在完成后关闭时,应打开该功能。程序可以如下所示:

case LOADING_CAMERA:
     LOADING_SUBJECT:
            return state.setIn('loading') = true;
没有样板。 缺点-减速机的订购将影响指示器何时打开/关闭

我们可以在调用每个功能的开始/结束时使用类似的代码

 this.store.dispatch({action:'LOADING', payload: true}); 
 //functionality
 this.store.dispatch({action:'LOADING', payload: false}); 
Adv-指示器pop开/关的受控顺序。 Cons-打开/关闭加载的样板代码

我们可以尝试将“负载”计算为一个组合的可观测值(每个减速器都有自己的局部“负载”属性和该属性的可观测值)

Adv-无样板文件,控制指示灯开启/关闭。
缺点-可能会增加复杂性和更多的代码。

组织Redux存储的典型方法是按每个键的某种域来组织数据,并定义一个reducer函数,该函数被授予维护该状态片更新的委托责任,通常由
组合reducer
实用程序组成。Redux绝对鼓励您让多个sub-reducer函数响应相同的传入操作,以便
sliceA
sliceB
根据需要独立更新。订购不应该是一个问题,因为每个子减速器通常不知道状态的任何其他部分,只关心更新自己的切片。有关一些相关信息,请参见Redux常见问题解答中的此答案:。

还有使用效果的选项。您可以订阅StateUpdates中的更改,只要发生状态更改,就会触发StateUpdates。我发现位于的示例应用程序是关于如何构建应用程序和ngrx的一个很好的信息来源

比如说,

@Effect() loadCollection$ = this.updates$
    .whenAction(BookActions.LOAD_COLLECTION)
    .switchMapTo(this.db.query('books').toArray())
    .map((books: Book[]) => this.bookActions.loadCollectionSuccess(books));
调度LOAD_集合时,将调用此函数,它执行后台工作并调度LOAD_集合,以更新组件。似乎任何有副作用的不纯函数都以这种方式工作得最好,在减缩器中只留下纯函数

@Effect() loadCollection$ = this.updates$
    .whenAction(BookActions.LOAD_COLLECTION)
    .switchMapTo(this.db.query('books').toArray())
    .map((books: Book[]) => this.bookActions.loadCollectionSuccess(books));