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