将大减速器拆分为较小的减速器
Posted
技术标签:
【中文标题】将大减速器拆分为较小的减速器【英文标题】:Splitting big reducer into smaller reducers 【发布时间】:2019-04-24 22:17:15 【问题描述】:我有一个特征缩减器(切片缩减器),称为动物。我想将这些减速器分成哺乳动物、鸟类、鱼类等。这部分很简单,因为我可以简单地使用ActionReducerMap
。
现在假设哺乳动物的减速器状态很大,我想将其拆分为几个较小的减速器,即猫的家庭、狗的家庭等。ActionReducerMap 不返回减速器并且不可嵌套。我尝试在网上搜索解决方案或示例,但找不到。简而言之,我的问题是如何制作多级嵌套减速器。
export interface AnimalsState
mammals: fromMammals.mammalsState;
birds: fromBirds.birdsState;
export const reducers: ActionReducerMap<AnimalsState> =
mammals: fromMammals.reducer,
birds: fromBirds.reducer
;
我想将哺乳动物减速器拆分成更小的减速器。
【问题讨论】:
【参考方案1】:您可以使用@ngrx/store
中的combineReducers 函数组成一个新的reducer,这将允许您将dogs
和cats
的reducer 组合成mammals
状态。
我在stackblitz上做了一个简单的例子来说明如何使用它。
combineReducers
函数的例子可以在app/store/mammals/mammals.reducer.ts
中找到:
import combineReducers from '@ngrx/store';
import catsStoreName, catsReducer, CatsState from '../cats';
import dogsStoreName, dogsReducer, DogsState from '../dogs';
export type MammalsState =
[catsStoreName]: CatsState,
[dogsStoreName]: DogsState,
export const mammalsReducer = combineReducers<MammalsState>(
[catsStoreName]: catsReducer,
[dogsStoreName]: dogsReducer,
);
【讨论】:
非常感谢。请问[catsStoreName]中括号是什么意思:catsReducer, 这是一个计算/动态属性名称,例如catsStoreName
变量的值。我用它来不一遍又一遍地写商店名称。以上是关于将大减速器拆分为较小的减速器的主要内容,如果未能解决你的问题,请参考以下文章