【问题标题】: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
};

我想将哺乳动物减速器拆分成更小的减速器。

【问题讨论】:

    标签: angular typescript ngrx ngrx-store


    【解决方案1】:

    您可以使用@ngrx/store 中的combineReducers 函数组成一个新的reducer,这将允许您将dogscats 的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 变量的值。我用它来不一遍又一遍地写商店名称。
    猜你喜欢
    • 2017-07-03
    • 2017-08-21
    • 1970-01-01
    • 2016-02-15
    • 2014-09-20
    • 1970-01-01
    • 1970-01-01
    • 2019-08-06
    • 1970-01-01
    相关资源
    最近更新 更多